Ошибка JavaScript и обработчик исключений - PullRequest
2 голосов
/ 15 декабря 2010

возможно ли зарегистрировать обработчик ошибок или исключений / функцию, которая будет выполняться при возникновении ошибки или исключения JavaScript? Я просто чувствую, что упаковка всех кодов в блок try / catch кажется очень утомительной и неэффективной.

Ответы [ 3 ]

6 голосов
/ 15 декабря 2010
window.onerror = function (msg, file, line) {
    // handle error here
}

Поддерживается:

  • Chrome 13 +
  • Firefox 6.0 +
  • Internet Explorer 5.5 +
  • Opera 11.60 +
  • Safari 5.1 +
1 голос
/ 15 декабря 2010

Вот альтернативный ответ, чем window.onerror решение. Это не то, что я использовал в производстве, но это то, что мне просто нравится из-за гибкости (т.е. вы можете использовать это для отладки таких вещей, как определение времени, сколько времени занял метод или что-то в этом роде).

Хотя вы, вероятно, могли бы передать в него window (не цитируйте меня об этом и не думайте, что это хорошая идея), это работает, если у вас есть все ваши методы в объекте :

(function(obj) {

    for (var name in obj) {
        if (typeof(obj[name]) == 'function') {
            currentMethod = obj[name];
            obj[name] = function() {
                try {
                    currentMethod();
                }
                catch (e) {
                    alert('Exception Handler: ' + e);
                }
            };
        }
    }

}(myObject));

Вот как это работает: http://jsfiddle.net/jonathon/kpYnW/

По сути, он просматривает каждое свойство в вашем объекте, находит те, которые являются функциями, и упаковывает их в try / catch (или все, что вы хотите).

Является ли он эффективным, это другой вопрос - я только что нашел его очень полезным методом для отладки. К сожалению, я не могу вспомнить исходное место, где я его читал, но, если кто-нибудь знает, пожалуйста, добавьте в качестве комментария.

1 голос
/ 15 декабря 2010

Ответ Энди Э (+1) говорит вам, как это сделать.

Тем не менее, JavaScript не предназначен для того, чтобы отлавливать исключения в том же смысле, как, скажем, Java. Если ваш код генерирует исключения, откройте консоль и воспользуйтесь отладчиком, чтобы исправить их. Исключения JS являются медленными и на самом деле не предназначены для управления потоком. Метод не выдаст исключение, если нет серьезной проблемы & mdash; и обычно это программирование ошибка.

...