【问题标题】:How do I capture and resume global errors in javascript?如何在 javascript 中捕获和恢复全局错误?
【发布时间】:2011-11-03 18:37:16
【问题描述】:

我正在为 javascript 编写一个测试套件,需要一种方法来捕获任何 JS 错误并继续处理页面的其余部分。

我不能使用 window.onerror,因为 return true 会阻止浏览器继续。我尝试使用 try {} catch 块,但由于各种原因,该函数在窗口 setTimeout() 中运行,这似乎弄乱了 try catch 块。

例如,我做这样的事情:

 function test(msg, fn) {
    $('#output').text(msg);
    try {
       fn.apply(this);
    } catch(e) {
       document.write('error'+e);
    };
}

然后这样称呼它

 test('trying this', function() { setTimeout('afunction()',100); });

但如果 afunction() 失败,则错误不会被捕获。

是否有人对允许我恢复的解决方案或全局错误处理程序有任何想法?

【问题讨论】:

    标签: javascript error-handling


    【解决方案1】:

    window.onerror,您可以将处理程序函数附加到它。如果该函数返回true,则会抑制错误:http://jsfiddle.net/pimvdb/qAv9J/2/

    window.onerror = function(e) {
        console.log(e);
        return true;
    };
    

    【讨论】:

    • 这会捕获所有错误吗?我记得一些与 PHP 类似的东西,它没有捕捉到严重错误。 - 这可能是简单的JS,但我不知道。感谢分享!
    • @Smamatti:我相信它不会捕获语法错误,只是因为解释器无法解析 onerror 赋值(如果有的话)。
    • @pimvdb 这在 回调 的情况下不起作用,例如从 Ajax 调用收到的那些,因此不适用于所有全局错误。
    • @JoshL:你确定吗?它似乎也适用于 ajax 回调:jsfiddle.net/sfA5M/2.
    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2020-01-06
    • 2019-03-22
    • 1970-01-01
    • 2021-01-26
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多