【问题标题】:window.onerror not working in chromewindow.onerror 在 Chrome 中不起作用
【发布时间】:2013-04-18 00:46:14
【问题描述】:

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

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

但我收到的只是:

notThere();
ReferenceError: notThere is not defined

我错过了什么?

浏览器:Chrome 26.0.1410.64 m

重现步骤:

  • 将代码添加到控制台。
  • 将 notThere() 添加到控制台

【问题讨论】:

    标签: google-chrome window onerror


    【解决方案1】:

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

    【讨论】:

    • 它有什么意义?
    • 我猜,它会劫持错误而不是在控制台中显示它们。
    • 我认为这是为了安全和隔离。因此,该站点无法访问用户在开发者控制台上篡改的内容。更不用说它会使可能的异常捕获混乱或导致未定义的行为捕获站点上没有自然发生的错误。
    • 那么使用控制台的日志不能被捕获到错误? window.location.href = "not://anywhere"; 我没有得到任何东西……它只是登录到控制台,我无法捕获它。有多少错误是不可能得到这样的?
    【解决方案2】:

    当控制台直接产生错误时不会触发window.onerror。 可以通过setTimeout触发,例如setTimeout(function() { notThere(); }, 0);

    可能重复:Chrome: Will an error in code invoked from the dev console trigger window.onerror?

    【讨论】:

      【解决方案3】:

      您可能无法处理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

      【讨论】:

        猜你喜欢
        • 2010-12-27
        • 2014-09-02
        • 2011-12-11
        • 2013-07-25
        • 2016-01-26
        • 2013-03-22
        • 2013-06-06
        • 2011-03-06
        • 2013-04-04
        相关资源
        最近更新 更多