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

Safari浏览器中beforeunload事件在部分页面跳转场景下不触发的问题求助

Safari浏览器中beforeunload事件在部分页面跳转场景下不触发的问题求助

大家好,我是一名高中老师,最近正在给我的课堂做在线考试的功能,核心需求是要准确区分学生离开考试页面的不同场景:比如切换到其他应用(页面失焦但仍可见)、切到其他标签页,或是在当前标签页里跳转到其他页面。这套逻辑在Chrome里跑起来完全符合预期,但在MacOS的Safari浏览器里遇到了棘手的问题,想请大家帮忙看看!

先跟大家说下目前正常工作的部分:

  • 监听blur事件的代码:
window.addEventListener("blur", function () {
  console.log("Blurred");
});

当页面失去焦点但还能被看到的时候(比如切换到其他应用窗口),这个事件触发完全正常。

  • 监听visibilitychange事件的代码:
window.addEventListener("visibilitychange", function () {
  console.log("Change Vis");
});

切换到其他标签页时,这个事件也能精准触发,完全符合我的预期。

现在的问题出在beforeunload事件上,我的代码是这样的:

window.addEventListener("beforeunload", function () {
  event.preventDefault();
  console.log("Before Unload");
});

这个事件只在部分场景下生效:刷新页面、关闭标签页、提交表单时能正常触发并打印日志,但点击页面内的链接、选择书签、在地址栏输入新网址跳转这些情况,它完全不会触发,这对我的考试防作弊逻辑影响很大。

有没有大佬遇到过类似的Safari兼容问题?求指点迷津!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:42:59