Вызывает ли Javascript событие для необработанных / необработанных исключений? - PullRequest
33 голосов
/ 04 декабря 2008

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

Обновление: Тванфоссон указал на возможную ошибку. Он не является частью спецификации и доступен только в браузерах на базе IE или Gecko.

Для получения дополнительной информации - http://books.google.com/books?id=tKszhx-XkzYC&pg=PA386&lpg=PA386&dq=safari+onerror+javascript&source=web&ots=gQaGbpUnjG&sig=iBCtOQs0aH_EAzSbWlGa9v5flyo#PPA387,M1

Таблица поддержки OnError - http://www.quirksmode.org/dom/events/error.html

Документация Mozilla - https://developer.mozilla.org/en/DOM/window.onerror

Отчет об ошибках WebKit - https://bugs.webkit.org/show_bug.cgi?id=8519

Ответы [ 2 ]

32 голосов
/ 18 ноября 2012

Проверьте эту скрипку:

http://jsfiddle.net/xYsRA/1/

window.onerror = function (msg, url, line) {
    console.log("Caught[via window.onerror]: '" + msg + "' from " + url + ":" + line);
    return true; // same as preventDefault
};

window.addEventListener('error', function (evt) {
    console.log("Caught[via 'error' event]:  '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
    console.log(evt); // has srcElement / target / etc
    evt.preventDefault();
});


throw new Error("Hewwo world.  I crash you!!!");

throw new Error("Hewwo world.  I can only crash you once... :(");

Какие отпечатки:

Caught[via window.onerror]: 'Uncaught Error: Hewwo world.  I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:21
Caught[via 'error' event]:  'Uncaught Error: Hewwo world.  I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:26
ErrorEvent {lineno: 32, filename: "http://fiddle.jshell.net/xYsRA/1/show/", message: "Uncaught Error: Hewwo world.  I crash you!!!", clipboardData: undefined, cancelBubble: false…}
 fiddle.jshell.net:27\

Примечания:

  • Если вы удалите строки «return true» / «evt.preventDefault ()», то после регистрации ошибки она будет напечатана на консоли JS обычным способом.

  • Вопреки утверждениям, сделанным выше, window.onerror работал во всех протестированных мной браузерах. Однако метод addEventListener, вероятно, лучше в любом случае и обеспечивает более богатую семантику.

8 голосов
/ 04 декабря 2008

Попробуйте использовать обработчик ошибки. Документы от MDN. Это позволит вам что-то делать при обнаружении ошибки, но, вероятно, не позволит вам продолжить изящным образом, как это сделал бы блок try / catch. Имейте в виду, что между браузерами, несомненно, есть различия в том, как это обрабатывается.

...