Javascript 日志显示错误对象:{“isTrusted”:true},而不是实际的错误数据
我有一个如下所示的事件处理程序:Javascript 日志显示错误对象:{“isTrusted”:true},而不是实际的错误数据,javascript,exception-handling,Javascript,Exception Handling,我有一个如下所示的事件处理程序: window.addEventListener('error', function (e) { SendLogErrorToServer('Error: ' + e.message + 'Error object: ' + JSON.stringify(e) + 'Script: ' + e.filename +
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);
Error: Script error.Error object: {"isTrusted":true} Script: Line: 0 Col: 0 Nav: Mozilla/5.0
问题是我收到的是这样的:
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);
Error: Script error.Error object: {"isTrusted":true} Script: Line: 0 Col: 0 Nav: Mozilla/5.0
如您所见,没有有用的行号或错误消息。要获取行号和错误详细信息,我需要更改什么?“脚本错误”可能意味着问题在于试图从外部域执行脚本
您没有关于行号和错误详细信息的信息,因为它不在您的页面上
答案中对这一点进行了相当广泛的介绍。在这种情况下,有两点需要注意。这两个点是相互独立的,应该是固定的,以解决您的问题 弗斯特 您面临的错误是一种特殊类型的错误,称为 “脚本错误”是浏览器在出现错误时向
onerror
回调发送的内容
错误源于来自不同来源的JavaScript文件
(不同的域、端口或协议)。这很痛苦,因为即使
虽然发生了一个错误,但你不知道错误是什么,
也不知道它来自哪个代码
这不是JavaScript错误
浏览器故意隐藏错误
出于安全考虑,源于来自不同来源的脚本文件
原因。这是为了避免脚本无意中泄漏
无法控制的OneError回调的敏感信息。
因此,浏览器只能提供window.onerror
错误洞察
源于同一域。我们只知道这是一个错误
发生-没有其他
要解决此问题:
要修复并获取正常错误对象,请选中此项
第二
当您尝试对任何错误对象进行字符串化时,结果将不会令人满意,因为您将丢失几乎所有的数据
原因是什么
JSON.stringify
仅处理可枚举属性,但Error
对象将上下文数据存储在可枚举属性中
要解决此问题
有很多解决方案,但这一个可能是直截了当的
JSON.stringify(err, ["message", "arguments", "type", "name"])
这会选择您想要的属性并为您生成字符串。您的问题是哪一个:#1)将错误序列化为JSON?或者#2)首先如何获取消息和行号?1号,你看到了吗?特别是,对于JSON.stringify()
:JSON.stringify(e,Object.getOwnPropertyNames(e))
,建议使用replacer
参数。