window.onerror函数在不同的浏览器上处理不同

时间:2011-11-16 16:17:06

标签: javascript logging error-handling cross-browser

我正在尝试实现一个简单的js日志记录。在测试下面的代码后,我发现它基于浏览器的行为有所不同。

将return更改为true,false或删除返回都会产生不同的效果。有谁知道如何避免这种情况。我希望能够捕获错误并记录它们,但我还想保持浏览器错误处理。

window.onerror = function () {
    alert('error caught!');
    // Basically here I fire a Google Analytics force event track call to log the error

    return false;
}

或者,如果有人知道记录客户端js错误的更好方法......

Chrome - 返回false - 在控制台中显示错误 Safari - 返回false - 在控制台中不显示错误

**有趣的切换返回true会给你完全相反的结果。不确定IE等。

1 个答案:

答案 0 :(得分:1)

如果你想要IE中错误的行号,我很确定你唯一的选择是window.onerror,因为当IE在try...catch块中引发异常时,它不包含电话号码。也就是说,每个浏览器都有一个不同的try...catch块抛出的异常实现 - 有些提供了一个完整的堆栈跟踪,你无法在任何浏览器中从window.onerror获得。我不知道你发现的特定怪癖,但我知道异常处理只是所有浏览器中最不一致的实现,并且它在每个浏览器中都没有保持不变;如果我没记错的话,Opera在Opera 10中更改了他们的异常类并打破了我为解析Opera中的异常而编写的内容。

可以说你已经发现了JavaScript中的异常处理地狱,唯一的方法就是浏览器检测和分支,以便为每个浏览器做正确的事情。我一直在寻找一个很好的库来处理JavaScript中的异常并抽象浏览器与我的差异,但到目前为止我还没找到。