2010-12-15 4 views
2

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

+1

Возможный дубликат [глобальной обработки ошибок JavaScript] (http://stackoverflow.com/questions/1378991/global-javascript-error-handling) – hvgotcodes 2010-12-15 20:07:15

+0

Bleh, уже из закрытых голосов за день. – 2010-12-15 20:12:01

ответ

6
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

Andy E's answer (+1) рассказывает вам, как это сделать.

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

1

Это альтернативный ответ, кроме решения 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 (или что-то еще, что вы хотите).

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