我在我的网站上添加了“确认您要离开”对话框,并且正在遇到onbeforeunload
事件的奇怪行为。
docs非常清楚:如果您的页面即将被卸载,则调用此事件。当您的eventHandler返回一个字符串时,将要求用户进行确认。根据浏览器的不同,字符串可能会显示给他。
但是在一个小的示例网站中,我注意到beforeunload
仅在用户以某种方式与该网站进行交互时才被触发。这是我的测试设置:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script>
<script type="text/javascript">
window.onload = function () {
$("#placeholder").text("website loaded")
window.onbeforeunload = function () {
return "Reloading the page will reset the survey!";
}
}
</script>
</head>
<body>
<p id='placeholder'></p>
</body>
</html>
加载窗口时,段落文本将更改,并且注册了
beforeunload
的eventHandler。如果我将其加载到Firefox中,则该段落将立即更改。但是,如果我关闭标签页或重新加载标签页,则无需确认。仅当我单击网站时,才会显示确认对话框。来回切换标签页还不够,仅等待大约10秒钟是不够的。
chrome中的行为是相同的。
单击网站后,总是会要求您确认。我可以重点关注另一个选项卡并关闭该示例(通过右键单击并单击“关闭选项卡”),它要求确认。或另一个标签集中,我尝试关闭浏览器,它要求确认。
这是怎么回事,如何确保在卸载站点之前始终触发该事件?
这是一个视频:
最佳答案
事件触发,但可能不会显示确认。从MDN:
注意:为防止意外弹出窗口,浏览器可能不会显示提示
除非页面已经被创建,否则在beforeunload事件处理程序中创建
与之互动,甚至可能根本不显示它们。