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
相关产品推荐
相关产品推荐

