2011-11-16 96 views
2

我想实现一个简单的js日志记录。在测试了下面的代码之后,我发现它基于浏览器的行为不同。window.onerror函数在不同的浏览器上处理方式不同

将返回值更改为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错误,一个更好的办法...

铬 - 返回false - 显示在控制台 错误野生动物园 - 返回false - 在控制台

不显示错误

**足够有趣的切换返回true给你完全相反的结果。不知道关于IE等

+0

考虑使用'try ... catch' http://jsfiddle.net/Q5Nz7/? – Niklas

+0

你能否在不同浏览器中列出结果?你发布的是一个标准,所以应该有相似的行为。 –

+0

在 – jhanifen

回答

1

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

只需说你已经发现了JavaScript中的异常处理问题,唯一的解决方法就是浏览器检测和分支,以便为每个浏览器做正确的事情。我一直在寻找一个好的库来处理JavaScript中的异常,并从我这里抽象出浏览器的差异,但到目前为止我还没有找到。

+1

之上添加了几个测试用例我找到了同样的东西,也许我们应该为此启动一个项目。 – jhanifen

相关问题