指点成金-最美分享吧

登录

日志显示错误对象:{“isTrusted”:true}而不是实际的错误数据

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了日志显示错误对象:{“isTrusted”:true}而不是实际的错误数据相关的知识,希望对你有一定的参考价值。

我有一个如下所示的事件处理程序:

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

如您所见,没有有用的行号或错误消息。我需要更改以获取行号和错误详细信息?

答案

在这种情况下,您需要注意两点。两点都是相互独立的,应该修复以解决您的问题。

第一

您遇到的错误是一种特殊类型的错误,称为Script Error

“脚本错误”是当错误源自从不同来源(不同域,端口或协议)提供的javascript文件时,浏览器发送到onerror回调的内容。这很痛苦,因为即使出现错误,您也不知道错误是什么,也不知道它来自哪个代码。

这不是JavaScript错误

出于安全原因,浏览器故意隐藏源自不同来源的脚本文件的错误。这是为了避免脚本无意中将潜在敏感信息泄露给它无法控制的onerror回调。因此,浏览器只会让window.onerror深入了解源自同一域的错误。我们所知道的是发生了一个错误 - 没有别的!

要解决此问题:

要修复并获取正常的错误对象,请检查此blog post

第二

当您尝试对任何Error对象进行字符串化时,结果将不会令人满意,因为您将丢失几乎所有数据。

原因就在于此

JSON.stringify仅处理可枚举属性,但Error对象将上下文数据存储在不可数属性中。

解决这个问题

有许多解决方案,但这可能是直截了当的

JSON.stringify(err, ["message", "arguments", "type", "name"])

这将选择您想要的属性并为您生成字符串。

另一答案

“脚本错误”可能意味着问题在于尝试从外部域执行脚本。

您没有关于行号和错误详细信息的信息,因为它不在您的页面上。

它在this question的答案中得到了广泛的报道。

以上是关于日志显示错误对象:{“isTrusted”:true}而不是实际的错误数据的主要内容,如果未能解决你的问题,请参考以下文章