【分享】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 definedSafari:
ReferenceError: Can't find variable: as也就是说,在Chrome和Safari中,window.onerror未起作用。
可见,IE 和 Firefox 提供了对 window.onerror 事件的支持,当页面内的 JavaScript 脚本出现错误时,window.onerror 被触发。
标准中的说法HTML4.01W3C 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一下就不知道出错了
------解决方案--------------------值得学习!
------解决方案--------------------学习,借鉴
------解决方案--------------------收藏学习下!