JQuery: глобальный обработчик исключений
Возможный дубликат:
Обработка исключений JavaScript
У меня есть веб-приложение, в котором 100% кода javascript выполняется как обработчики событий jQuery (я думаю, что большинство приложений jQuery похожи на это).
Вопрос в том, как определить глобальный обработчик исключений. То есть, если функция, которая вызывается, когда любое исключение, которое происходит в любом обработчике события jQuery, не отображается (будь то onload, click, succesfull ajax call, ajax error, что угодно).
Моя функция получит информацию об ошибке (исключение, stacktrace, что угодно).
Разъяснение: Я не имею в виду глобальную уловку в проблемах ajax, сгенерированных сервером или сетью, но глобально улавливающие проблемы, связанные с (предположительно) ошибками в нашем коде.
Ответы
Ответ 1
Я предполагаю, что это может быть достигнуто с помощью концепций Аспектно-ориентированное программирование.
Мы можем просто создать оболочку jQuery.event.dispatch
, которая будет обрабатывать ошибки:
(function () {
var temp = jQuery.event.handle;
jQuery.event.handle = function () {
try {
temp.apply(this, arguments);
} catch (e) {
console.log('Error while dispatching the event.');
}
}
}());
$(document).click(function () {
throw 'Some error...';
});
Используя этот подход, вы должны быть очень осторожны из-за изменений во внутреннем интерфейсе
- Обратите внимание, что пример выше работает для jQuery v1.6.3, в jQuery 1.7.1
jQuery.event.dispatch
вместо jQuery.event.handle
.
Ответ 2
Вы можете использовать window.onerror
: https://developer.mozilla.org/en-US/docs/DOM/window.onerror
window.onerror = function errorHandler(msg, url, line) {
console.log(arguments);
// Just let default handler run.
return false;
}