13

可能重复:
JavaScript 异常处理

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

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

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

4

2 回答 2

15

您可以使用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;
}
于 2013-01-17T08:20:55.953 回答
3

我想这可以使用面向方面编程的概念来实现。

我们可以简单地创建一个包装器来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.
于 2013-01-17T08:34:10.227 回答