我正在使用Sentry记录JS客户端错误,并且有很多TypeError: cancelled
错误。它仅在iOS上发生。我在Google上找不到任何东西。这是本机Javascript错误还是其他?什么意思?
我在其他语言中也遇到类似的错误,例如취소됨
,Abgebrochen
和cancelado
。这告诉我该错误不是由我的代码引起的。
答案 0 :(得分:3)
如果您使用的是fetch
API,则在iOS 11.1-12中,AbortController
和AbortSignal
可能会出现问题,只有在有人尝试中止获取操作时才会触发请求(这就是为什么它不一定会影响所有iOS用户的原因,并解释了不一致之处)。
详细地说,iOS 11.1-12在DOM中定义了AbortController
和AbortSignal
,但是它们是一个存根-see here。因此,如果您尝试在<= 12中中止iOS中的获取请求,该请求将不会中止,并且可能会引发某种错误。
鉴于它是TypeError
而不是AbortError
,因此问题似乎在于AbortController
的定义不正确/完整。
编辑:
进一步的阅读似乎还表明,即使对于诸如阻止获取之类的事情,iOS中的fetches
失败也会引发TypeError
错误。如上所述,问题可能出在安装了任何广告拦截程序(例如,越狱的iPhone上)或CORS
问题,然后iOS会抛出TypeError
-Webkit BugZilla discussion。因此,专注于错误类型可能会导致您走错路。
答案 1 :(得分:2)
令人沮丧吗?
最近,我们的团队遇到了同样的错误。这就是我们的情况。页面加载后,刷新按钮变为十字按钮,现在,如果在此页面加载期间正在进行一些api请求,并且用户单击此十字按钮,则iOS chrome / safari会引发此错误。在相同情况下,Firefox浏览器会抛出TypeError: NetworkError when attempting to fetch resource
,而Chrome浏览器会抛出TypeError: Failed to fetch
。
这不是我们真正应该担心的问题,因此我们决定使用哨兵的ignoreErrors属性使哨兵忽略此错误。
Sentry.init({
dsn: "sentry_dsn",
ignoreErrors: [
'TypeError: Failed to fetch',
'TypeError: NetworkError when attempting to fetch resource.',
'TypeError: Cancelled'
],
});
注意:
CORS错误还会导致无法获取,请注意这一点。
同样,我们决定使用哨兵的beforeSend回调忽略在400到426之间的statusCode错误。
我们花了几天的时间尝试查找此错误。希望这对某人有帮助。
谢谢
另外, 最初是在这里写的:https://forum.sentry.io/t/typeerror-failed-to-fetch-reported-over-and-overe/8447/2