Chrome 正常运行,Firefox 却失败了。

我并排在两个浏览器中查看同一个页面。

在 Chrome 中:页面运行完美。有图片、按钮和完整的搜索结果列表。

在 Firefox 中:页面是空的。它只显示了没有图片的占位卡片,并提示“找到 0 条结果”。

代码是一样的。URL 是一样的。服务器也没问题。

问题在于浏览器。

Firefox 使用了“增强型跟踪保护”(Enhanced Tracking Protection)。许多用户还会使用 uBlock Origin 之类的工具。这些工具会拦截它们认为是追踪器的域名的请求。

我的应用从一个 Supabase 域名获取数据。在 Firefox 看来,那个域名就像是一个第三方追踪器。浏览器在请求发出之前就将其拦截了。

由于 fetch 请求失败,我的代码显示了回退状态(fallback state)。它没有崩溃,控制台也没有报错,只是显示了一个空页面。

这造成了双重盲点:

我通过将第三方请求转为第一方请求解决了这个问题。

我没有直接调用供应商的域名,而是使用了反向代理。我将 API 路由到了我自己的域名下。

之前:mysite.com 调用 xxxx.supabase.co(被拦截) 之后:mysite.com 调用 mysite.com/sb-api(受信任)

现在,浏览器看到的是同源请求(same-origin request)。它会将该数据调用视为网站本身的一部分。

如果你遇到类似的问题,请记住这三点:

• 留意你的 websockets。简单的路径重写可能会破坏实时连接。 • 固定你的身份验证存储键(auth storage keys)。更改 URL 可能会改变浏览器存储登录会话的方式。 • 预渲染你的内容。不要让你的页面完全依赖 JavaScript。如果浏览器拦截了你的脚本,用户仍应能在 HTML 中看到核心内容。

不要再假设“如果 Chrome 能运行,那对所有人来说都没问题”。请在开启隐私扩展的情况下进行测试。

来源:https://dev.to/henry_dan_81513dd35a2f540/chrome-showed-the-data-firefox-showed-nothing-the-api-was-being-blocked-4mpn