jQuery:全局异常处理程序

时间:2013-01-17 08:17:56

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

  

可能重复:
  JavaScript Exception Handling

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

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

澄清:我并不是指全局捕获服务器或网络产生的ajax问题,而是全局捕捉由于(可能)错误导致的问题。

2 个答案:

答案 0 :(得分:12)

您可以使用window.onerrorhttps://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;
}

答案 1 :(得分:3)

我想这可以使用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