错误处理 - 浏览器环境
当 JavaScript 运行时错误(包括语法错误)发生时,window
会触发一个ErrorEvent
open in new window接口的error
事件,并执行window.onerror()
。
错误处理方式
window.onerror
window.onerror = function(
message,
source,
lineno,
colno,
error
) {
// ...
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
message
:错误信息(字符串)。可用于HTML onerror=""处理程序中的event。source
:发生错误的脚本URL(字符串)lineno
:发生错误的行号(数字)colno
:发生错误的列号(数字)error
:Error对象(对象)
若该函数返回true
,则阻止执行默认事件处理函数。
window.addEventListener('error')
window.addEventListener('error', function(event) { ... })
1
ErrorEvent
open in new window类型的event
包含有关事件和错误的所有信息。
element.onerror
element.onerror
使用单一Eventopen in new window参数的函数作为其处理函数。
注意事项
当加载自不同域open in new window的脚本中发生语法错误时,为避免信息泄露(参见bug 363897open in new window),语法错误的细节将不会报告,而代之简单的"Script error."。在某些浏览器中,通过在<script>
使用crossorigin
属性并要求服务器发送适当的 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;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
当使用行内HTML标签(<body onerror="alert('an error occurred')">
)时,HTML规范要求传递给onerror
的参数命名为event
、source
、lineno
、colno
、error
。针对不满足此要求的浏览器,传递的参数仍可使用arguments[0]
到arguments[2]
来获取。