【问题标题】:jQuery: global exception handler [duplicate]jQuery:全局异常处理程序
【发布时间】:2012-12-31 17:37:55
【问题描述】:

可能重复:
JavaScript Exception Handling

我有一个 Web 应用程序,其中 100% 的 javascript 代码作为 jQuery 事件处理程序执行(我猜大多数 jQuery 应用程序都是这样的)。

问题是如何定义全局异常处理程序。也就是说,如果在任何 jQuery 事件处理程序中发生的任何异常未被捕获时调用的函数(无论是 onload、click、成功的 ajax 调用、ajax 错误等)。 我的函数将收到错误信息(异常、堆栈跟踪等)。

澄清:我的意思不是全局捕获由服务器或网络生成的 ajax 问题,而是全局捕获由于(可能)我们代码中的错误引起的问题。

【问题讨论】:

    标签: javascript jquery web-applications web error-handling


    【解决方案1】:

    我想这可以使用Aspect-oriented programming 中的概念来实现。

    我们可以简单地创建一个 jQuery.event.dispatch 的包装器来处理错误:

    (function () {
        var temp = jQuery.event.handle;
        jQuery.event.handle = function () {
           try {
              temp.apply(this, arguments);
           } catch (e) {
              console.log('Error while dispatching the event.');
           }
        }
    }());
    $(document).click(function () {
        throw 'Some error...';
    });
    

    使用这种方法你必须非常小心,因为内部接口的变化

    • 请注意,上面的示例适用于 jQuery v1.6.3,在 jQuery 1.7.1 中 jQuery.event.dispatch 而不是 jQuery.event.handle

    【讨论】:

    • +1 用于界面更改
    【解决方案2】:

    您可以使用window.onerror : https://developer.mozilla.org/en-US/docs/DOM/window.onerror

    window.onerror = function errorHandler(msg, url, line) {
    
      console.log(arguments);
    
      // Just let default handler run.
      return false;
    }
    

    【讨论】:

    • 这应该是公认的答案
    • 这几乎永远不会奏效。 :) Note that some/many error events do not trigger window.onerror, you have to listen for them specifically 他们说。
    • @mayankcpdixit Works for me。你能举一个没有被抓到的例子吗?
    • 现代风格works too.
    • 例如:如果您使用 Angular,错误不会通过 window.onerror。您必须使用工厂处理它们。 window.onerror在控制台直接产生错误时不会触发。
    猜你喜欢
    • 2014-04-17
    • 2011-05-19
    • 2011-08-31
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2011-04-07
    相关资源
    最近更新 更多