--- title: GlobalEventHandlers.onerror slug: Web/API/GlobalEventHandlers/onerror tags: - API - Property - Reference translation_of: Web/API/GlobalEventHandlers/onerror ---
Error事件的事件处理程序,在各种目标对象的不同类型错误被触发:
error事件,并执行window.onerror()。error事件,并执行该元素上的onerror()处理函数。这些error事件不会向上冒泡到window,不过(至少在Firefox中)能被单一的{{domxref("window.addEventListener")}}捕获。加载一个全局的error事件处理函数可用于自动收集错误报告。
由于历史原因,window.onerror和element.onerror接受不同的参数。
window.onerror = function(message, source, lineno, colno, error) { ... }
函数参数:
message:错误信息(字符串)。可用于HTML onerror=""处理程序中的event。source:发生错误的脚本URL(字符串)lineno:发生错误的行号(数字)colno:发生错误的列号(数字){{gecko_minversion_inline("31.0")}}error:Error对象(对象){{gecko_minversion_inline("31.0")}}若该函数返回true,则阻止执行默认事件处理函数。
window.addEventListener('error', function(event) { ... })
{{domxref("ErrorEvent")}} 类型的event包含有关事件和错误的所有信息。
element.onerror = function(event) { ... }
element.onerror使用单一{{domxref("Event")}}参数的函数作为其处理函数。
当加载自不同域的脚本中发生语法错误时,为避免信息泄露(参见{{bug("363897")}}),语法错误的细节将不会报告,而代之简单的"Script error."。在某些浏览器中,通过在{{HTMLElement("script")}}使用{{htmlattrxref("crossorigin","script")}}属性并要求服务器发送适当的 CORS HTTP 响应头,该行为可被覆盖。一个变通方案是单独处理"Script error.",告知错误详情仅能通过浏览器控制台查看,无法通过JavaScript访问。
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 {
var message = [
'Message: ' + msg,
'URL: ' + url,
'Line: ' + lineNo,
'Column: ' + columnNo,
'Error object: ' + JSON.stringify(error)
].join(' - ');
alert(message);
}
return false;
};
当使用行内HTML标签(<body onerror="alert('an error occurred')">)时,HTML规范要求传递给onerror的参数命名为event、source、lineno、colno、error。针对不满足此要求的浏览器,传递的参数仍可使用arguments[0]到arguments[2]来获取。
| 规范 | 状态 | 注释 |
|---|---|---|
| {{SpecName('HTML WHATWG','webappapis.html#handler-onerror','onerror')}} | {{Spec2('HTML WHATWG')}} |
在Firefox 14之前,当{{HTMLElement("script")}}加载失败时,window.onerror被传入"Error loading script"信息。该bug已在{{bug("737087")}}修复,取而代之,在这种情况下,scriptElement.onerror将被触发。
自Firefox 31始加入最后两个参数(colno and error),意味着通过提供的Error对象,你可以从window.onerror访问脚本错误的stack trace({{bug("355430")}}。)