如何使用“ onerror”捕获“ ReferenceError”

时间:2019-06-11 18:02:33

标签: javascript error-handling referenceerror

我希望我的脚本检查许多依赖关系,并在成功后出现一个提交按钮。但是,如果发生任何类型的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:未定义测试”。但是为什么onerror警报不起作用?

1 个答案:

答案 0 :(得分:1)

因为您已将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
};