Я хочу регистрировать необработанные исключения javascript. Есть ли событие, которое срабатывает, когда исключение не обнаружено? Я хочу перехватить исключения до того, как они вызовут ошибки javascript в браузере, но я бы предпочел не запускать все свое приложение внутри try / catch. Любая помощь будет оценена по достоинству. Спасибо!
Обновлять: tvanfosson указал на возможность ошибки. Он не является частью спецификации и доступен только в браузерах на базе IE или Gecko.
Дополнительная информация - http://books.google.com/books?id=tKszhx-XkzYC&pg=PA386&lpg=PA386&dq=safari+onerror+javascript&source=web&ots=gQaGbpUnjG&sig=iBCtOQs0aH_EAzSbWlGa9
Таблица поддержки 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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте использовать обработчик ошибок. Документы из MDN. Это позволит вам что-то сделать при обнаружении ошибки, но, вероятно, не позволит вам продолжить работу так же изящно, как блок try / catch. Имейте в виду, что между браузерами, несомненно, существуют различия в том, как это обрабатывается.
@ L0j1k Я обычно не использую его сейчас как ресурс, но интересно, что даже w3fools.com признал, что они улучшились. «У W3Schools все еще есть проблемы, но они, по крайней мере, поработали над основной заботой разработчиков. Для многих новичков в W3Schools есть структурированные учебные пособия и игровые площадки, которые предлагают приличный опыт обучения. Однако было бы ошибкой продолжать свое образование, не извлекая дополнительных уроков. авторитетные источники, так что, когда вы будете готовы к повышению уровня, двигайтесь дальше ».
Ссылка не работает
А еще лучше опубликуйте свой пример, чтобы он содержался в вопросе, а не делитесь ссылкой, которая может измениться через 5 лет.
Взгляните на эту скрипку:
window.onerror = function (msg, url, line) {
console.info("Caught[via window.onerror]: '" + msg + "' from " + url + ":" + line);
return true; // same as preventDefault
};
window.addEventListener('error', function (evt) {
console.info("Caught[via 'error' event]: '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
console.info(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, вероятно, в любом случае лучше и обеспечивает более богатую семантику.
Вот обновленная рабочий пример, которая удаляет зависимость от библиотеки, которая больше не доступна: jsfiddle.net/xYsRA/103
Вот стандартное предупреждение против использования w3schools.com в качестве справочника. См. w3fools.com для получения дополнительной информации.