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

Safari与Firefox中_self跳转致fetch请求中断,如何保留请求?

解决方案:页面跳转时保留Fetch请求(无需等待请求完成)

针对Safari和Firefox中点击_self外部链接导致fetch请求中断的问题,除了阻止默认跳转再等待请求完成的方案外,有两种直接可行的方式:

1. 使用Fetch的keepalive选项

fetch API内置的keepalive参数,开启后浏览器会在页面卸载时持续保留该请求,无需等待请求完成即可正常跳转。

修改后的代码示例:

const handleLinkClick = useCallback(() => {
  fetch('https://rickandmortyapi.com/api', {
    method: 'POST',
    keepalive: true
  })
}, [])

return (
  <a
    href="https://www.google.com/"
    onClick={handleLinkClick}
  >
    link
  </a>
);

注意事项:

  • 请求大小存在限制(通常不超过64KB),超出会触发报错;
  • Safari 14.1+、Firefox 75+已支持该特性。

2. 使用navigator.sendBeacon()

这是浏览器专为页面卸载场景设计的数据发送API,兼容性更好,且不会阻塞页面跳转流程。

修改后的代码示例:

const handleLinkClick = useCallback(() => {
  // sendBeacon仅支持特定请求体格式:FormData/Blob/字符串,无法自定义复杂请求头
  const data = new FormData();
  // 若需发送JSON数据,可转为Blob格式
  // const data = new Blob([JSON.stringify({ key: 'value' })], { type: 'application/json' });
  navigator.sendBeacon('https://rickandmortyapi.com/api', data);
}, [])

return (
  <a
    href="https://www.google.com/"
    onClick={handleLinkClick}
  >
    link
  </a>
);

注意事项:

  • 仅支持POST请求,且无法自定义多数请求头(如Authorization);
  • 请求大小限制比keepalive更宽松;
  • Safari 11+、Firefox 31+等所有现代浏览器均支持。

内容的提问来源于stack exchange,提问作者Stanislav Zherebchuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:58:38