fre*_*hie 20 javascript exception-handling
我有一个如下所示的事件处理程序:
window.addEventListener('error', function (e) {
SendLogErrorToServer('Error: ' + e.message +
'Error object: ' + JSON.stringify(e) +
'Script: ' + e.filename +
'Line: ' + e.lineno +
'Col: ' + e.colno +
'Nav: ' + window.navigator.userAgent));
}, false);
Run Code Online (Sandbox Code Playgroud)
问题是我收到的内容如下:
Error: Script error.Error object: {"isTrusted":true} Script: Line: 0 Col: 0 Nav: Mozilla/5.0
Run Code Online (Sandbox Code Playgroud)
如您所见,没有有用的行号或错误消息.我需要更改以获取行号和错误详细信息?
Mou*_*eer 33
在这种情况下,您需要注意两点.两点都是相互独立的,应该修复以解决您的问题.
您遇到的错误是一种特殊类型的错误 Script Error
"脚本错误"是
onerror当错误源自从不同来源(不同域,端口或协议)提供的JavaScript文件时,浏览器发送给回调的内容.这很痛苦,因为即使出现错误,您也不知道错误是什么,也不知道它来自哪个代码.
这不是JavaScript错误
出于安全原因,浏览器故意隐藏源自不同来源的脚本文件的错误.这是为了避免脚本无意中将潜在敏感信息泄露给它无法控制的onerror回调.因此,浏览器只能
window.onerror深入了解源自同一域的错误.我们所知道的是发生了一个错误 - 没有别的!
要解决此问题:
要修复并获取正常的错误对象,请查看此博客文章
当您尝试对任何Error对象进行字符串化时,结果将不会令人满意,因为您将丢失几乎所有数据.
原因就在于此
JSON.stringify仅处理可枚举属性,但Error对象将上下文数据存储在不可数属性中.
解决这个问题
有许多解决方案,但这可能是直截了当的
JSON.stringify(err, ["message", "arguments", "type", "name"])
Run Code Online (Sandbox Code Playgroud)
这将选择您想要的属性并为您生成字符串.