Запускает ли Javascript событие для необработанных / неперехваченных исключений?

Я хочу регистрировать необработанные исключения 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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
38
0
17 142
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Вот стандартное предупреждение против использования w3schools.com в качестве справочника. См. w3fools.com для получения дополнительной информации.

L0j1k 04.10.2014 01:14

@ L0j1k Я обычно не использую его сейчас как ресурс, но интересно, что даже w3fools.com признал, что они улучшились. «У W3Schools все еще есть проблемы, но они, по крайней мере, поработали над основной заботой разработчиков. Для многих новичков в W3Schools есть структурированные учебные пособия и игровые площадки, которые предлагают приличный опыт обучения. Однако было бы ошибкой продолжать свое образование, не извлекая дополнительных уроков. авторитетные источники, так что, когда вы будете готовы к повышению уровня, двигайтесь дальше ».

tvanfosson 04.10.2014 01:26

Ссылка не работает

cletus 15.09.2016 23:48

А еще лучше опубликуйте свой пример, чтобы он содержался в вопросе, а не делитесь ссылкой, которая может измениться через 5 лет.

Umopepisdn 26.01.2017 05:46

Взгляните на эту скрипку:

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

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

Aaron Mason 28.09.2018 02:06

Другие вопросы по теме