можно ли зарегистрировать ошибку или обработчик/функцию исключения, которая будет выполняться при возникновении ошибки или исключения javascript? Я просто чувствую, что все коды в блоке try/catch кажутся очень утомительными и неэффективными.ошибка JavaScript и обработчик исключений
ответ
window.onerror = function (msg, file, line) {
// handle error here
}
При поддержке:
- Chrome 13+
- Firefox 6.0+
- Internet Explorer 5.5+
- Opera 11.60+
- Safari 5.1+
Andy E's answer (+1) рассказывает вам, как это сделать.
Тем не менее, JavaScript не предназначен для того, чтобы поймать execeptions в том же смысле, что, скажем, Java. Если ваш код бросает исключения, вытащите консоль и используйте отладчик, чтобы исправить их. Исключения JS являются медленными, и на самом деле они не предназначены для управления потоком. Метод не будет генерировать исключение, если есть серьезная проблема —, и это обычно ошибка.
Это альтернативный ответ, кроме решения window.onerror
. Это не то, что я использовал в производстве, но это то, что мне просто нравится из-за гибкости (т. Е. Вы можете использовать его для отладки таких вещей, как выбор времени, в течение которого принимался метод или что-то в этом роде).
Хотя вы, вероятно, может пройти window
в него (не цитируйте меня на этом, и не думаю, что это хорошая идея) она будет работать, если у вас есть все ваши methods in an object:
(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 (или что-то еще, что вы хотите).
Независимо от того, эффективен ли это другой вопрос - я только что нашел его очень полезным методом для отладки. К сожалению, я не могу вспомнить исходное место, которое я прочитал, но если кто знает, добавьте в качестве комментария.
Возможный дубликат [глобальной обработки ошибок JavaScript] (http://stackoverflow.com/questions/1378991/global-javascript-error-handling) – hvgotcodes 2010-12-15 20:07:15
Bleh, уже из закрытых голосов за день. – 2010-12-15 20:12:01