日期:2014-05-17  浏览次数:20858 次

【分享】window.onerror,屏蔽JS error的利器?
提到window.onerror,大家应该都不陌生吧。
为了屏蔽JS错误,为了应付所谓的领导的突击检查系统进度,可以暂时另令你的页面清净一下。

出现兼容性问题
看一个例子:
HTML code
<script>
window.onerror=function(){
  document.write("encountered JS  errors.");
}
as();
</script>
上面代码中执行了一个未定义的JS方法 as()。当执行时,找不到定义,会报JS错误。
这段代码,在IE和Firefox里都有效果,在页面上输出了: encountered JS errors.
在Chrome和Safati中,都在控制台报了JS错误。
Chrome:Uncaught ReferenceError: as is not defined
Safari:ReferenceError: Can't find variable: as
也就是说,在Chrome和Safari中,window.onerror未起作用。

可见,IE 和 Firefox 提供了对 window.onerror 事件的支持,当页面内的 JavaScript 脚本出现错误时,window.onerror 被触发。

标准中的说法
HTML4.01
W3C HTML4.01 规范第 18.2.3 节介绍了 HTML 中的固有事件(Intrinsic events),其中并没有 onerror 事件。

HTML5  
在 HTML5 规范草案中描述了 window 对象的事件处理程序,其中有 onerror 事件存在,详细情况请参照草案说明:6.1.6.2 Event handlers on elements。可见,各浏览器还没有统一此实现。

MSDN和MDC  
根据 MSDN 及 Mozilla Developer Center 中的描述,当页面中的脚本出错的时候就会触发 window.onerror 事件,这个事件的监听器(event handler)拥有三个参数:msg(错误消息内容)、url(发生错误的页面的 URL)、line(发生错误的代码所在行行号)。  
而浏览器是否按照其默认方式显示错误消息,取决于 onerror 事件的返回值。若返回 false,则在浏览器控制台(若有)中显示错误消息。反之则不再显示错误消息。

可见,对window.error的支持差异来自标准自身的不一致性,啥时候HTML5正式发布了,啥时候这个问题也就解决了吧应该。

所以,还是放弃使用window.onerror吧,使用try-catch捕捉错误是比较标准的做法。

更多兼容性问题:
【分享】浏览器兼容性问题目录

------解决方案--------------------
?????????????啊啊啊啊啊啊啊啊
------解决方案--------------------
learning......
------解决方案--------------------
还不错吧,只管ie就可以了
------解决方案--------------------
 
学习了
------解决方案--------------------
还真没用过window.onerror,因为有错就要改嘛,onerror一下就不知道出错了
------解决方案--------------------
值得学习!
------解决方案--------------------
学习,借鉴
------解决方案--------------------
收藏学习下!