首页 > 解决方案 > 从 Chrome 中的 window.addEventListener('error') 获取回溯?

问题描述

我正在尝试在没有内置 JavaScript 控制台(例如移动设备)的设备上记录错误。在此过程中,我试图使用window.addEventListener('error', (event)=>{...}).

在 Firefox 中,该条目event.error可以访问有关错误的完整信息。然而,在 Chrome 中,event.error总是null. 同样,作为参数之一传递的等效错误对象window.onerror存在于 Firefox 中,但在 Chrome 中缺失。

这是预期的行为吗?是否有一些可靠的跨浏览器访问回溯信息的方法?

例子

在控制台中执行,例如在此站点上。

window.addEventListener('error', (err) => {
    for(const key in err) {
        console.log(key,'=',err[key]);
    }
});
// Chrome doesn't capture errors produced directly in the console,
// so we use a timeout.
window.setTimeout(()=>{ noSuchVariable; }, 100)

我得到:

VM5685:3 isTrusted = true
VM5685:3 message = Script error.
VM5685:3 filename = 
VM5685:3 lineno = 0
VM5685:3 colno = 0
VM5685:3 error = null
...

我在私有模式下获得了相同的结果,即它与扩展无关。

Firefox 给出了更有用的结果:

sTrusted = true debugger eval code:3:17
message = ReferenceError: noSuchVariable is not defined debugger eval code:3:17
filename = debugger eval code debugger eval code:3:17
lineno = 8 debugger eval code:3:17
colno = 25 debugger eval code:3:17
error = ReferenceError: "noSuchVariable is not defined"
    <anonymous> debugger eval code:8

标签: javascripterror-handling

解决方案


正如CertainPerformance所指出的,该问题是由使用Chrome 开发者控制台引起的,这会干扰错误处理。

javascript:但是,如果错误是在计时器内或通过键入URL执行的脚本内引发的,则错误数据是正确给出的。


推荐阅读