在iOS上调用“抓取”时出现Javascript“ TypeError:canceled”错误

时间:2019-04-18 02:43:13

标签: javascript

我正在使用Sentry记录JS客户端错误,并且有很多TypeError: cancelled错误。它仅在iOS上发生。我在Google上找不到任何东西。这是本机Javascript错误还是其他?什么意思?

enter image description here

我在其他语言中也遇到类似的错误,例如취소됨Abgebrochencancelado。这告诉我该错误不是由我的代码引起的。

2 个答案:

答案 0 :(得分:3)

如果您使用的是fetch API,则在iOS 11.1-12中,AbortControllerAbortSignal可能会出现问题,只有在有人尝试中止获取操作时才会触发请求(这就是为什么它不一定会影响所有iOS用户的原因,并解释了不一致之处)。

详细地说,iOS 11.1-12在DOM中定义了AbortControllerAbortSignal,但是它们是一个存根-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