window.onerror = function (message, url, lineNo, columnNo, error)
参数:
message {String} 错误信息。
url {String} 发生错误对应的脚本路径。
lineNo {Number} 错误发生的行号。
columnNo {Number} 错误发生的列号。
error {Object} 具体的 error 对象,包含更加详细的错误调用堆栈信息。
兼容性问题:
不同浏览器对同一个错误的 message 是不一样的。
IE10以下浏览器只能获取到 message,url 和 lineNo这三个参数,获取不到columnNo 和 error,不过 window.event
对象提供了 errorLine
和 errorCharacter
,以此来对应相应的行列号信息。
在使用onerror的时候,可以使用arguments.callee.caller
来递归出调用堆栈,这一类信息是最直接的错误信息信息。
跨域问题
跨域情况下,返回的结果是 Script error.
。
1.script 添加 crossorigin 属性
<script crossorigin src="...">
2.cors
header('Access-Control-Allow-Origin: *');
3.反向代理
可能要注意的点
多次注册 error 事件,不会重复执行多个回调。
注意错误报告收集的机制,去除冗余数据。
window.onerror需要在错误发生前绑定,所以该方法应该放在顶部依赖比较合适。