窗口.Onerror函数在不同浏览器上的处理方式不同

window.onerror function handled differently on different browsers

本文关键字:处理 方式不 浏览器 窗口 函数 Onerror      更新时间:2023-09-26

我试图实现一个简单的js日志记录。在测试了下面的代码后,我发现它的行为是不同的浏览器。

将return改为true、false或删除return都有不同的效果。有人知道怎么避免这种情况吗?我希望能够捕获错误并记录它们,但我也希望维护浏览器的错误处理。

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 - return false -在控制台显示错误Safari -返回false -在控制台

中不显示错误

**转换为返回true会得到完全相反的结果。不确定IE等

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

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