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.