Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:onbeforeunload何时触发?_Javascript_Html_Dom_Dom Events - Fatal编程技术网

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,$将不再有效,因此该段落不会更改。但卸载行为和你自己说的一样:“根据浏览器的不同,字符串可能会显示给他。”这并不能保证。显然,这个浏览器决定,如果用户没有与该页面交互,那么该页面可能没有很好的理由阻止用户离开。不,这是不同的。该字符串可以是请求确认时显示的消息,也可以不是。浏览器也可以显示自己的消息文本。但是如果有处理程序,它应该请求确认