Javascript文件中的全局错误处理

时间:2017-04-10 09:28:38

标签: javascript exception exception-handling webbrowser-control

我有以下代码:

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

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

每个函数都会调用第三方库,因此使用window.onerror只会给我一个非常通用的Script error,我无法使用它(显然是由于交叉原点问题)

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

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

1 个答案:

答案 0 :(得分:1)

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

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);
    }
});