Javascript:onbeforeunload何时触发?
我在我的网站上添加了一个“确认您想离开”的对话,我遇到了一个奇怪的Javascript:onbeforeunload何时触发?,javascript,html,dom,dom-events,Javascript,Html,Dom,Dom Events,我在我的网站上添加了一个“确认您想离开”的对话,我遇到了一个奇怪的onbeforeuload事件 问题很清楚:如果您的页面即将卸载,则调用此事件。当eventHandler返回字符串时,将要求用户确认。根据浏览器的不同,字符串可能会显示给他 但在一个小样本网站中,我注意到只有当用户以某种方式与网站交互时,beforeunload才会被实际触发。这是我的测试设置: <!DOCTYPE html> <html lang="en"> <head> <
onbeforeuload
事件
问题很清楚:如果您的页面即将卸载,则调用此事件。当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>
window.onload=函数(){
$(“#占位符”).text(“网站已加载”)
window.onbeforeunload=函数(){
return“重新加载页面将重置调查!”;
}
}
加载窗口时,段落文本将被更改,并且在卸载之前注册的事件处理程序。如果我在Firefox中加载这个,段落会立即更改
但是如果我关闭选项卡或重新加载它,则不需要确认。确认对话框仅在我单击网站时显示。来回切换标签是不够的,等待ca 10s是不够的
铬的行为是相同的
一旦我在网站上点击,总是会要求确认。我可以让另一个选项卡聚焦并关闭这个示例(通过右键单击并“关闭选项卡”),它要求确认。或者另一个选项卡被锁定,我试图关闭浏览器,它要求确认
这里发生了什么,如何确保在卸载站点之前始终触发事件
以下是一段视频:
事件将触发,但确认信息可能不会显示。从:
注意:为了避免不必要的弹出窗口,浏览器可能不会显示提示
在beforeunload事件处理程序中创建,除非页面已
与它们交互,甚至可能根本不显示它们
你有没有试过在卸载之前不要包装成onload,看看是否有区别?就是这样。如果我删除onload,$将不再有效,因此该段落不会更改。但卸载行为和你自己说的一样:“根据浏览器的不同,字符串可能会显示给他。”这并不能保证。显然,这个浏览器决定,如果用户没有与该页面交互,那么该页面可能没有很好的理由阻止用户离开。不,这是不同的。该字符串可以是请求确认时显示的消息,也可以不是。浏览器也可以显示自己的消息文本。但是如果有处理程序,它应该请求确认