在iOS上调用fetch时出现JavaScript的“TypeError: Load Failed”错误

42

我正在使用 Sentry 记录 JS 客户端错误,但出现了很多“TypeError: Load failed”错误。这只发生在 iOS 上。我在 Google 上找不到任何相关信息。这是原生 JavaScript 错误还是其他问题?它的意思是什么?这与另一个看似相关的“TypeError: cancelled”问题无关。

来自面包屑的 Sentry 截图


请提供足够的代码,以便他人更好地理解或重现问题。 - Community
4
没有要添加的代码,这是在Sentry中出现的错误。 - Thomas Stewart
1
嘿@ThomasStewart,你能解决这个问题吗?我也遇到了同样的问题!我在网上找不到任何信息。 - Avallon Azevedo
嘿!你有任何更新吗? - Artory
当遇到网络错误或服务器端CORS配置错误时,fetch()承诺将以TypeError拒绝,尽管这通常意味着权限问题或类似问题。 - Will
4个回答

29
据我所知,fetch API在失败时可能会故意返回非常有限的错误信息。(否则,恶意JS程序可以发出各种fetch请求并查看它们的结果,以确定哪些内部服务器存在,用户可以访问哪些服务器等等。)
如果您有Mac电脑,可以通过使用Safari DevTools控制台尝试fetch请求来自己验证。例如: Safari TevTools控制台截图 对于google.com的请求由于CORS而失败。对于example.does-not-exist的请求是无效的名称。DevTools控制台提供了完整的详细信息,因此实际在浏览器上的开发人员可以进行故障排除,但这些详细信息对JS代码不可用;在每种情况下,JS代码都会收到相同的“TypeError:Load failed”消息。
如果您有幸能够访问浏览器控制台,则可以查看更多详细信息,否则,我不知道您可以做什么来跟踪问题 - 它可能几乎是任何网络错误。

2
截至2023年,“Load failed”是IOS在获取数据时无响应的消息。在Windows系统中,拼写为“Failed to fetch”。
可以通过在fetch周围使用try/catch(error)来检测这些消息。这些字符串将是error.message的确切值。

1
在我的情况下,这个问题主要出现在iOS 15的Safari浏览器上。通过在Mac上调试iPhone,我发现带有imagesrcset预加载链接在Safari中处理不好(除非被降低优先级),会抛出<link rel=preload> has an invalid imagesrcset value,如此问题所述。
之所以在Sentry中看起来像是获取错误,是因为预加载链接实际上在幕后使用fetch
考虑到只是图像预加载失败,并且除非它给您带来性能问题,否则您可以安全地忽略Sentry中的这个特定问题,直到这个webkit Bug 231150 - Safari complains about invalid imagesrcset value in where Chrome doesn't被修复。

该错误已于2023年8月10日修复。https://bugs.webkit.org/show_bug.cgi?id=231150 - Michael Freidgeim

1

我遇到了同样的问题,这是由于证书问题和 iPhone 将地址 API 视为危险导致的。

帮助我直接在 Safari 或 Chrome 中访问地址 API:https://my-adres-api/api/product,然后选择允许连接该地址。

现在请求工作得非常好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接