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
参数。