javascript和JQuery焦点图和代码特效大全
当前最流行的开源CMS网站系统大全
当前位置:首页 > WEB前端 > JavaScript > 

仅 IE 和 Firefox 支持 window 对象的 onerror 事件

来源:IT技术网编辑:李建新发布于:2017-02-12人围观

问题描述

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

造成的影响

若希望通过 window.onerror 事件屏蔽页面中的脚本错误,或者获取页面脚本错误的信息,则在不同浏览器中会产生差异。

受影响的浏览器

IE6 IE7 IE8 Firefox  

问题分析

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

在 HTML5 规范草案中描述了 window 对象的事件处理程序,其中有 onerror 事件存在,详细情况请参照草案说明:6.1.6.2 Event handlers on elements。

根据 MSDN 及 Mozilla Developer Center 中的描述,当页面中的脚本出错的时候就会触发 window.onerror 事件,这个事件的监听器(event handler)拥有三个参数:msg(错误消息内容)、url(发生错误的页面的 URL)、line(发生错误的代码所在行行号)。

而浏览器是否按照其默认方式显示错误消息,取决于 onerror 事件的返回值。若返回 false,则在浏览器控制台(若有)中显示错误消息。反之则不再显示错误消息。

 

分析以下代码:

<script>
	window.onerror = function (msg, url, line) {
		alert(url + ":\nline:" + line + "\n" + msg);
		return true;
	}
	asd
</script>

上面代码为 window.onerror 事件绑定了一个监听器,并试图在脚本出错的时候显示出脚本出错时显示出错页面 URL、行号及错误信息。

在各浏览器中运行结果为:

IE6 IE7 IE8 Firefox Chrome Safari Opera
window.onerror.html:
line:6
'asd' 未定义
window.onerror.html:
line:6
asd is not defined
控制台提示:
Uncaught ReferenceError: asd is not defined ReferenceError: Can't find variable: asd Uncaught exception: ReferenceError: Undefinedvariable: asd

可见,window.onerror 事件仅 IE、Firefox 可以被触发,返回了需要的信息,并屏蔽了控制台的错误提示。

解决方案

放弃使用 window.onerror,通过合理使用 try-catch 来达到近似的效果。

与相关的文章
有时间的话来看看IT界的突发事件