Сегодня я решил разобраться с такой интересной темой как кроссбраузерный отлов ошибок в JavaScript. Мне удалось найти два способа ловли ошибок: глобальный и локальный.
Локальный способ: Нужно поставить потенциально опасный ошибками код в специальную зону:
try {
// Сюда помещаем потенциально опасный код.
// Если мы хотим выбросить пользовательскую ошибку, то делаем так:
throw new Error("User exception!");
}
catch(e) { // Если ошибку нашли, то...
} finally {
// Здесь выполняем действия, которые нужны в любом случае.
}
В объект e попадет вся информация об ошибке. И вот тут, начинается самое интересное: все браузеры делают свой набор информации. Вот сводная табличка: Свойство\Браузер:Firefox3.5Opera9.8Safari3.1.2IE6Chrome3.0Назначение свойства name+++++Просто название ошибки.filename+----Имя файла, в котором найдена ошибка sourceURL--+--Имя файла, в котором найдена ошибка message+++++Описание ошибки. Например, при выбросе пользовательской ошибки сюда попадет ее текст.stack+---+Стек ошибки (окружающий ее код)stacktrace-----Тоже стек.line--+--Номер строки, на которой возникла ошибка.lineNumber+----Номер строки, на которой возникла ошибка.number---+- sourceId--+-- description---+- type----+ arguments----+ opera#sourceloc-?--- Даже в самой Опере непонятно, как его использовать. Разнообразие вариантов очень велико. Но ситуация оказывается еще интереснее. Набор полей в этой табличке можно дополнять своими. Например вот так:
throw {
message: "Ошибка доступа",
code: 403,
smile: '=)'
};
Если этот вариант не подходит, или нужно отлавливать ошибки глобально, то можно использовать
Глобальный способ:
window.onerror=function(msg, url, linenumber){
alert('Ошибка: '+msg+'\nURL: '+url+'\nНомер строки: '+linenumber)
return true
}Этот способ работает только в Firefox и IE, но может быть я просто не нашел способа для других браузеров. Пока думаю над этим.