JS: Ловим ошибки - кто больше?

Dec 17, 2009 14:41

Сегодня я решил разобраться с такой интересной темой как кроссбраузерный отлов ошибок в 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, но может быть я просто не нашел способа для других браузеров. Пока думаю над этим.

catch, finally, browser, js, firefox, try, error, onerror, safari, opera, javascript, chrome, event, throw, ie

Previous post Next post
Up