Как поймать "ReferenceError" с помощью "onerror" - PullRequest
1 голос
/ 11 июня 2019

Я хочу, чтобы мой скрипт проверял множество зависимостей, и в случае успеха должна появиться кнопка отправки.НО, если бы была какая-либо ошибка JavaScript, кнопка никогда не должна появляться.Поэтому я хочу сделать в конце своего сценария что-то вроде:

if (typeof window.error_has_appeared == 'undefined') {
    button.classList.add("button_activated");
}

Я попытался решить мою проблему с помощью window.onerror, но, похоже, не для перехвата всех ошибок.

<script type="text/javascript">
window.onerror = function(msg, url, line, col, error) {
   alert("ERROR");
};

window.onload = async function() {
   test
};
</script>

Я вижу в журнале javascript: «ReferenceError: test не определен».Но почему оповещение об ошибке не работает?

1 Ответ

1 голос
/ 11 июня 2019

Поскольку вы сделали обработчик onload функцией async, а не необработанной ошибкой, обрабатываемой глобальным обработчиком ошибок, ReferenceError является необработанным отклонением обещания, и поэтому он обрабатывается глобальным отклонением обещанияобработчик.

Поскольку код события load ничего не делает с обещанием, возвращаемым асинхронной функцией, просто сделайте вашу функцию не async:

window.onerror = function(msg, url, line, col, error) {
   console.log("ERROR");
};

window.onload = function() {
   test
};

Или используйте onunhandledrejection:

window.onerror = function(msg, url, line, col, error) {
   console.log("onerror triggered");
};
window.onunhandledrejection = function(msg, url, line, col, error) {
   console.log("onunhandledrejection triggered");
};

window.onload = async function() {
   test
};
...