Несколько вопросов о window.onerror
Итак... если в самом начале подключить скрипт
function ErrorHandler(message, file, line, col, error){ // обработка ошибки } window.onerror = ErrorHandler; То все ошибки и непойманные исключения попадут в наш обработчик. Есть здесь несколько минусов: - если далее в коде, в каком-то из подключенных файлов кто-то переопределит window.onerror, то все - наш обработчик пойдет лесом - стандартно имеем только 3 параметра: текст ошибки, файл, номер строки 4 и 5 параметры поддерживают не все браузеры. В FF есть только три параметра, в Chrome все 5, в иных только 4. Самый интересный - 5 параметр, сам объект ошибки. Он нужен для получения стека - error.stack. Если 5 параметра нет, то и стека у нас нет, за исключением IE - в нем псевдо стек можно построить через задницу function ErrorHandler(message, file, line, col, error){ if(typeof error === "undefined"){ var fn = ErrorHandler; while(fn = fn.caller){/***/} } } В других браузерах ErrorHandler.caller === null Ну и вопросы: 1. Как надежно определить свой обработчик для window.onerror 2. Как внутри window.onerror получить трассировку Если сделать так window.addEventListener("error", function(e){ // ... }); То поймать ошибку в FF и Opera не удастся, так как в FF в обработчик передается пустой Event вместо ErrorEvent, а Opera почему-то вообще не заходит в обработчик. |
Часовой пояс GMT +3, время: 13:26. |