Запускает ли Javascript событие для необработанных / неперехваченных исключений?
-
19-08-2019 - |
Вопрос
Я ищу возможность регистрировать необработанные исключения javascript.Существует ли событие, которое срабатывает, когда исключение не перехвачено?Я хочу перехватить исключения до того, как они вызовут ошибки javascript в браузере, но я бы предпочел не запускать все мое приложение внутри try / catch .Будем признательны за любую помощь.Спасибо!
Обновить:тванфоссон указал на onerror как на возможность.Это не является частью спецификации и доступно только в браузерах на базе 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
Решение
Попробуйте использовать обработчик onerror . Документы из MDN.Это позволит вам что-то сделать при обнаружении ошибки, но, вероятно, не позволит вам продолжить изящно, как это сделал бы блок try / catch.Имейте в виду, что, несомненно, существуют различия между браузерами в том, как это обрабатывается.
Другие советы
Посмотри на эту Скрипку:
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, вероятно, в любом случае лучше и обеспечивает более богатую семантику.