You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

useSWR在Firefox和Safari中无法正常工作(Next.js应用)

useSWR在Firefox和Safari中无法正常工作(Next.js应用)

遇到这种跨浏览器的请求差异问题确实挺闹心的,我帮你梳理几个常见的排查方向和解决办法:

  • 缓存策略的浏览器差异:useSWR默认会利用浏览器缓存,而Firefox和Safari对缓存的处理逻辑和Chrome略有不同。你可以尝试在fetch函数里显式设置缓存策略,强制跳过缓存直接发起请求:

    const fetcher = async (url) => {
      const res = await fetch(url, { cache: 'no-store' });
      if (!res.ok) throw new Error('请求失败');
      return res.json();
    };
    
  • 浏览器隐私防护拦截:Firefox的增强跟踪保护、Safari的智能防跟踪功能,可能会拦截带有特定特征的请求(比如跨域请求、包含第三方标识的请求)。你可以先临时关闭浏览器的隐私防护功能测试一下,如果请求能正常发送了,就得调整后端的CORS配置,确保响应头包含正确的Access-Control-Allow-Origin等字段,同时检查请求头里有没有违反浏览器隐私规则的内容。

  • useSWR的启用配置问题:检查一下你的useSWR调用有没有设置enabled: false或者revalidateOnMount: false这类选项,这些配置可能会导致在某些浏览器环境下请求不触发。确保你的调用是这样的:

    const { data, error } = useSWR('/api/user-items', fetcher, {
      revalidateOnMount: true,
      enabled: true,
    });
    
  • Next.js组件类型影响:如果你的组件是静态生成的服务端组件,可能在Firefox/Safari里不会触发客户端的useSWR请求。可以给组件加上'use client'指令,将其转为客户端组件,确保useSWR能在客户端正常执行。

  • 请求URL的兼容性问题:检查请求URL里是否包含特殊字符,有些字符在Chrome里能正常解析,但在Firefox/Safari里会被拦截。如果有动态参数,记得用encodeURIComponent处理一下,避免URL解析异常。

备注:内容来源于stack exchange,提问作者mack1ch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:58:05