window.onerror 在 chrome 中不起作用

问题描述 投票:0回答:4

我正在尝试向我的网站添加 onerror 事件。

window.onerror = function() {
    alert("an error");
}

但我收到的只是:

notThere();
ReferenceError: notThere is not defined

我错过了什么?

浏览器:Chrome 26.0.1410.64 m

重现步骤:

  • 将代码添加到控制台。
  • 将 notThere() 添加到控制台
google-chrome window onerror
4个回答
65
投票

控制台直接产生错误时,不会触发window.onerror。 不过,它可以通过

setTimeout
触发,例如,
setTimeout(function() { notThere(); }, 0);

可能重复:Chrome:从开发控制台调用的代码中的错误会触发 window.onerror 吗?


43
投票

window.onerror
在Chrome中工作(参见jsfiddle - http://jsfiddle.net/PWSDF/),但显然不在控制台中 - 这有一定道理。


28
投票

您可能无法处理

window.onerror
中的错误的一些其他原因(除了提到的):

  • 另一个图书馆在你之后设置了
    window.onerror
  • 如果您使用 Angular,错误将不会通过

    window.onerror
    。你必须使用这个工厂来处理它们:

        .factory('$exceptionHandler', function() {
            return function errorCatcherHandler(exception, cause) {
                console.error(exception);
                if (window.OnClientError) window.OnClientError(exception);
            };
        })
    

参见:

https://docs.angularjs.org/api/ng/service/$exceptionHandler

http://bahmutov.calepin.co/catch-all-errors-in-angular-app.html


0
投票

对我来说,问题是错误是在异步函数中抛出的,而异步函数中抛出的错误是由

window.onunhandledrejection
处理的,而不是
window.onerror
(来源:为什么 onerror 不拦截来自 Promise 和异步函数的异常) 。因此,如果您希望错误处理程序能够处理来自异步函数的错误,则还需要将其分配给
window.onunhandledrejection

window.onerror = window.onunhandledrejection = function(){
    alert("an error");
}

async function f(){
    notThere();
}

f();    //Alerts "an error"

© www.soinside.com 2019 - 2024. All rights reserved.