Chrome 正常运行,Firefox 却失败了。
我并排在两个浏览器中查看同一个页面。
在 Chrome 中:页面运行完美。有图片、按钮和完整的搜索结果列表。
在 Firefox 中:页面是空的。它只显示了没有图片的占位卡片,并提示“找到 0 条结果”。
代码是一样的。URL 是一样的。服务器也没问题。
问题在于浏览器。
Firefox 使用了“增强型跟踪保护”(Enhanced Tracking Protection)。许多用户还会使用 uBlock Origin 之类的工具。这些工具会拦截它们认为是追踪器的域名的请求。
我的应用从一个 Supabase 域名获取数据。在 Firefox 看来,那个域名就像是一个第三方追踪器。浏览器在请求发出之前就将其拦截了。
由于 fetch 请求失败,我的代码显示了回退状态(fallback state)。它没有崩溃,控制台也没有报错,只是显示了一个空页面。
这造成了双重盲点:
- 我的开发浏览器(Chrome)运行完美,我从未发现这个 bug。
- 我的分析工具使用了同一个域名。那些无法看到内容的用户的行为也无法被追踪。他们变得“隐形”了。
我通过将第三方请求转为第一方请求解决了这个问题。
我没有直接调用供应商的域名,而是使用了反向代理。我将 API 路由到了我自己的域名下。
之前:mysite.com 调用 xxxx.supabase.co(被拦截) 之后:mysite.com 调用 mysite.com/sb-api(受信任)
现在,浏览器看到的是同源请求(same-origin request)。它会将该数据调用视为网站本身的一部分。
如果你遇到类似的问题,请记住这三点:
• 留意你的 websockets。简单的路径重写可能会破坏实时连接。 • 固定你的身份验证存储键(auth storage keys)。更改 URL 可能会改变浏览器存储登录会话的方式。 • 预渲染你的内容。不要让你的页面完全依赖 JavaScript。如果浏览器拦截了你的脚本,用户仍应能在 HTML 中看到核心内容。
不要再假设“如果 Chrome 能运行,那对所有人来说都没问题”。请在开启隐私扩展的情况下进行测试。