Javascript 文件中的全局错误处理

Global error-handling in Javascript file

我有以下代码:

var test = { 
  func1: function() {...},
  func2: function() {...},
  func3: function() {...}
};

现在,我希望能够捕获 func1/2/3 中可能抛出的任何异常。有没有一种优雅的方法可以做到这一点,而不必在每个函数中插入一个 try catch?

每个函数都会调用第 3 方库,所以使用 window.onerror 只会给我一个非常通用的 Script error,我不能真正使用它(显然是由于跨源问题) .

代码在 WPF 的 WebBrowser 控件中执行,其中浏览器的目标是 IE10。除了纯 javascript 和 jQuery,我不允许使用任何东西。

每当捕获到异常时,我都会将其进一步传播到底层视图模型,然后将其记录在服务器上。

您可以自己构建一个可重复使用的包装器:

function wrap(f) {
    return function() {
        try {
            return f.apply(this, arguments);
        }
        catch (e) {
            errorHandler(e, f);
            throw e; // Or not, but if not, what would you return?
        }
    };
}

然后:

var test = { 
  func1: wrap(function() {...}),
  func2: wrap(function() {...}),
  func3: wrap(function() {...})
};

var test = { 
  func1: function() {...},
  func2: function() {...},
  func3: function() {...}
};
Object.keys(test).forEach(function(key) {
    var func = test[key];
    if (typeof func === "function") {
        test[key] = wrap(func);
    }
});