error
事件的event handler,Error事件会在不同目标上因各种错误而触发::
- 当JavaScript运行时错误(包括语法错误)发生时,
window
会触发一个ErrorEvent
接口的error
事件,并执行window.onerror()
。 - 当一项资源(如
<img>
或<script>
)加载失败,加载资源的元素会触发一个Event
接口的error
事件,并执行该元素上的onerror()
处理函数。这些error事件不会向上冒泡到window,不过(至少在Firefox中)能被单一的window.addEventListener
捕获。
加载一个全局的error
事件处理函数可用于自动收集错误报告。
语法
由于历史原因,window.onerror
和element.onerror
接受不同的参数。
window.onerror
window.onerror = function(message, source, lineno, colno, error) { ... }
函数参数:
message
:错误信息(字符串)。Available asevent
(sic!) in HTMLonerror=""
handler.source
:发生错误的脚本URL(字符串)lineno
:发生错误的行号(数字)colno
:发生错误的列号(数字)error
:Error对象(对象)
若该函数返回true
,则阻止执行默认事件处理函数。
element.onerror
element.onerror = function(event) { ... }
element.onerror
使用单一Event
参数的函数作为其处理函数。
注意事项
当加载自不同域的脚本中发生语法(?)错误时,为避免信息泄露(参见bug 363897),语法错误的细节将不会报告,而代之简单的"Script error."
。在某些浏览器中,通过在<script>
使用
属性并要求服务器发送适当的CORSHTTP响应头,该行为可被覆盖。一个变通方案是单独处理"Script error.",告知错误详情仅能通过浏览器控制台查看,无法通过JavaScript访问。crossorigin
window.onerror = function (msg, url, lineNo, columnNo, error) { var string = msg.toLowerCase(); var substring = "script error"; if (string.indexOf(substring) > -1){ alert('Script Error: See Browser Console for Detail'); } else { alert(msg, url, lineNo, columnNo, error); } return false; };
当使用行内HTML标签(<body onerror="alert('an error occurred')">
)时,HTML规范要求传递给onerror
的参数命名为event
、source
、lineno
、colno
、error
。针对不满足此要求的浏览器,传递的参数仍可使用arguments[0]
到arguments[2]
来获取。
规范
规范 | 状态 | 注释 |
---|---|---|
WHATWG HTML Living Standard onerror |
Living Standard |
浏览器兼容性
在Firefox 14之前,当<script>
加载失败时,window.onerror
被传入"Error loading script"信息。该bug已在bug 737087修复,取而代之,在这种情况下,scriptElement.onerror
将被触发。
自Firefox 31始加入最后两个参数(colno
and error
),意味着通过提供的Error
对象,你可以从window.onerror
访问脚本错误的stack trace(bug 355430。)