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

Safari 15-16中beforeunload弹窗无法阻止缓存页面跳转:Bug还是特性?

Safari中beforeunload事件的异常行为与解决方案疑问

beforeunload事件的设计初衷是让用户在离开页面前有机会保存未完成的工作,但Safari 15-16版本中该功能无法正常工作。我仅需要它的原生用途,未用于触发beaconing、清空localStorage等操作,也未使用Promise或await。

在空白HTML页面中使用以下测试脚本时,能看到beforeunload弹窗,但页面会立即跳转到目标地址(需先点击窗口确保浏览器检测到交互):

<script>
  function beforeUnloadListener(event) {
    if (true) {
      event.preventDefault();
      // eslint-disable-next-line no-param-reassign
      event.returnValue = 'This message is ignored in modern browsers.';
      return event;
    }
    return null;
  }
  addEventListener('beforeunload', beforeUnloadListener, { capture: true });
</script>

测试场景及异常表现:

  • 关闭浏览器窗口时,弹窗会正常阻止窗口关闭
  • 跳转到Safari中的另一个缓存页面时,弹窗会显示,但页面会直接跳转到新地址,弹窗仍停留在原页面的上层。此时点击弹窗的确认或取消按钮仅会关闭弹窗,无法对页面跳转行为产生任何影响,弹窗形同虚设。

这与Chrome、Firefox的预期行为完全不符:在这两款浏览器中,页面会等待用户点击弹窗选项后,才执行跳转或取消跳转操作。

这种弹窗显示但页面已跳转的行为明显不合理,这是Safari的设计如此吗?目前尚未找到在Safari中实现该功能的有效方法,求可行的解决方案。

内容的提问来源于stack exchange,提问作者Benjamin Tremblay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:36:14