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

时间:2017-06-29 01:58:38

标签: 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);

问题是我收到的内容如下:

Error: Script error.Error object: {"isTrusted":true} Script: Line: 0 Col: 0 Nav: Mozilla/5.0

如您所见,没有可用的行号或错误消息。我需要更改什么才能获得行号和错误详细信息?

2 个答案:

答案 0 :(得分:23)

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

第一

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

  

“脚本错误”是浏览器发送到window.onerror回调的时候   错误源自从不同来源提供的JavaScript文件   (不同的域,端口或协议)。甚至是痛苦的   虽然发生了错误,但您不知道错误是什么,   也不是它起源于哪个代码。

这不是JavaScript错误

  

浏览器故意隐藏错误   源自不同来源的脚本文件以确保安全性   原因。这是为了避免脚本无意中泄漏   敏感信息到它无法控制的onerror回调。   出于这个原因,浏览器只能Error洞察错误   来自同一个域。我们所知道的只是一个错误   发生了 - 没有别的!

解决此问题:

要修复并获取正常的错误对象,选中此blog post

第二

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

原因

Error仅处理可枚举属性,但JSON.stringify(err, ["message", "arguments", "type", "name"]) 对象将上下文数据存储在不可数属性中。

解决此问题

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

-rwxr----- 1 sammy sammy 566719 Jul  1 14:52 developer.jpg

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

答案 1 :(得分:1)

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

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

this question的答案涵盖了相当广泛的内容。