Angular文档中某处是否有ErrorEvent
的定义? 显然,这不是以正确的方式“继承” Error
。
问题可能出在TraceKit的traceKitWindowOnError()
方法中,似乎没有考虑到message
参数可能是ErrorEvent
(请参阅MDN文档)
@benvinegar ErrorEvent
上有一些文档: https :
也受此影响,这些用户也是如此:
https://forum.sentry.io/t/reporting-object-errorevent/1807
[email protected] (但在旧版本上也已经发生了一段时间)
角4.x
使用CLI
与Ionic 3和[email protected]相同
<script>
undefined.foo();
</script>
^这在您的html中通过哨兵以[object ErrorEvent]
登录野生动物园。 正确的消息应该是TypeError: undefined is not an object (evaluating 'undefined.foo')
。
我们有一个外部脚本,该脚本通过script标签注入代码以尝试创建iframe,但是被Safari阻止了。 由于错误是由注入的脚本标记引起的,因此哨兵只报告[object ErrorEvent]
报告为[object Event]
哨兵另一个错误是来自flowplayer。 流程播放器确实
jQueryElement.trigger('error', [api, {code: 5}]);
您可以通过嵌入jQuery来重现它,然后执行以下操作:
$('div:first').trigger('error')
哨兵看到这样的事情
当然那不是很可序列化,但是像error on element from jQuery - context <div class="foo><div class="bar" ...
这样的错误比[object Event]
有用得多
也受此影响。
@daangeerdink @jdelaune @rosslavery @tgensol有人可以提供最小的代码来帮助我重现吗?
我刚刚检查了@sod ,在您上面提到的情况下Safari 10.1.2提供了正确的消息。
我个人无法提供复制,因为错误是如此不透明,我无法辨别代码库的哪一部分引发了错误。 我没有任何堆栈跟踪可以使用,也没有错误消息可以弄清楚这是我的代码还是第三方库等。
希望其他人可以提供一个简化的示例,对不起,我没有更多的帮助。
我们也有这个问题。 我可以共享最近10天的一些数据(此类活动22k,用户13k)。 我希望它可以帮助您重现它。
@kamilogorek我们有2百万个此类错误。 我认为这是我们的问题,但我们无法正确跟踪它。
我发现了问题。 ErrorEvent
isError
util函数未将ErrorEvent
视为错误,可以在此处找到。 为了方便起见,我还将粘贴函数定义:
function isError(value) {
switch ({}.toString.call(value)) {
case '[object Error]':
return true;
case '[object Exception]':
return true;
case '[object DOMException]':
return true;
default:
return value instanceof Error;
}
}
我在控制台中进行了快速测试,以查看此函数是否对ErrorEvent
返回true,但是没有:
isError
方法中使用captureException
来确定异常参数是错误还是消息。 captureException
认为异常不是错误,则会使用captureMessage
captureException
将异常发送到仪表板。 在这种情况下,Raven将不会计算堆栈跟踪或“处理”异常。 它只是按原样发送它。
有什么原因我们不应该更新isError
为ErrorEvent
对象返回true吗?
有什么原因我们不应该更新isError为ErrorEvent对象返回true吗?
是。 因为它实际上不是Error
的后代(它是Event
的后代)。 例如,它没有stack
属性(AFAICT,在控制台中播放)。 这意味着它可能实际上并未得到正确处理。
很高兴看到一个如何实时生成此错误的示例,以便我们可以确定如何最好地处理它。
ErrorEvent
的构造函数采用Error
,因此您可以像这样轻松地处理它们:
if (isErrorEvent(ex)) {
ex = ex.error;
}
您可以在此处查看构造定义。 特别是,请看ErrorEventInit
哈希。 这是一个可选参数,所以我想我上面发布的解决方案无法处理未定义ErrorEvent.error
情况。
当然,我相信这可以解决–我的意思是,这不只是增加isError
来返回true
。
我明白。 我会在几分钟后提出公关。
已在3.19.x
修复
谢谢@shcallaway! 👍
似乎我们仍在3.19.1
🤔上遇到此问题
@PhilippSpo此事件来自哪个浏览器? 在某些旧的移动浏览器和IE中不支持ErrorEvent
,因此我们不得不退回常规解决方案。
@kamilogorek Chrome 61.0.3163
我也在Chrome 61上看到了它。 😕我会尽快调查。
谢谢@shcallaway
在Safari 11.0,Mac OS 10.13上也会发生
当'message'参数是一个ErrorEvent对象时, traceKitWindowOnError似乎无法正确处理输入参数:
而“ ex”是不确定的。 然后,它使用对象(其中“消息”字段是ErrorEvent而不是字符串)来调用notifyHandlers:
当在_makeRequest中分层时,会产生无意义的消息。
感谢您的调查@ michal-rumanek,我将尽快解决此问题(本周没有空余时间)。
@kamilogorek ,有什么进展吗? ;-)
嗨,我收到了很多这样的错误[object Object]
。
角度4
铬62.0.3202
Raven-js 3.20.1
最有用的评论
我发现了问题。
ErrorEvent
isError
util函数未将ErrorEvent
视为错误,可以在此处找到。 为了方便起见,我还将粘贴函数定义:我在控制台中进行了快速测试,以查看此函数是否对
ErrorEvent
返回true,但是没有:isError
方法中使用captureException
来确定异常参数是错误还是消息。captureException
认为异常不是错误,则会使用captureMessage
captureException
将异常发送到仪表板。 在这种情况下,Raven将不会计算堆栈跟踪或“处理”异常。 它只是按原样发送它。有什么原因我们不应该更新
isError
为ErrorEvent
对象返回true吗?