【问题标题】:I can't trigger the unload event in Chrome我无法在 Chrome 中触发卸载事件
【发布时间】:2012-08-24 08:04:19
【问题描述】:

这段代码在 Firefox 上运行良好,但我无法让卸载事件在 Chrome 上运行。 Chrome 是否停止支持卸载事件?

这是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>

<script type="text/javascript" src="../jquery/jquery.js"></script>

<script type="text/javascript">

    function pageHidden(evt) { alert("Are you sure 1?"); } //WORKS ON FIREFOX BUT NOT IN CHROME
    window.addEventListener("pagehide", pageHidden, false);

    window.onunload = function () { alert("Are you sure 2?"); } //TRIGGERS ON LOAD NOT ON UNLOAD

    $(window).unload(function () { //WORKS ON FIREFOX BUT NOT IN CHROME
        alert("Are you sure 3?");
    });

</script>
</head>

<body>
TEST WEBSITE
<a href="http://www.iamawesome.com">external link</a>
</body> 
</html>

如何让卸载事件在 Chrome 中工作?

谢谢!


回答: 不要使用警报测试卸载事件;)

【问题讨论】:

  • 您不会在代码中的任何地方触发任何内容。你只是绑定处理程序。
  • 检查this bug report。简而言之,它在 Chrome 中不起作用;尝试改用 .onunload 处理程序,但即使这样也可能是“固定的”。 )

标签: javascript jquery


【解决方案1】:
window.onunload = alert("Are you sure 2?");

这是不正确的。您将onunload 设置为alert 的结果,您需要将其设置为函数:

window.onunload = function(){
    alert("Are you sure?");
}

如果你想使用 jQuery,这将适用于所有浏览器。

$(window).unload(function () {
     alert("Are you sure?");
});

注意:它可能看起来在 Chrome 中不起作用,但确实如此。这是因为 Chrome 在 onunload 事件中阻止了 alerts。

【讨论】:

  • 这就是问题所在。 Chrome 阻止了我的所有警报。我尝试了一个console.log,它工作正常。感谢您的快速回答!
  • 如果您使用警报,您应该会在 Chrome 的控制台中看到一个错误。
  • 这不再对我有用,请参阅下面的@jeteon 解决方案,它对我有用
【解决方案2】:

试试:

window.onbeforeunload = function () {
    // code
};

window.onpagehide = function () {
    // code
};

【讨论】:

  • 感谢 Korikulum!我试过了,但它没有显示我在每个函数中编写的警报消息
  • onpagehide 是一个值得了解的有用事件,但您不能相信每次页面消失时都会调用它。例如,如果您启动一个新选项卡,然后关闭整个浏览器,则该事件可能不会触发。
【解决方案3】:

根据我的阅读,一旦触发该事件,Chrome 似乎会阻止警报。但是,您可以运行一些功能,但不能运行任何与用户交互的东西。

window.onbeforeunload in Chrome: what is the most recent fix?看来,如果您只想弹出一条确认消息,则必须通过从您设置为回调的函数返回一个带有消息的字符串来完成。

window.onbeforeunload = function() {
    // Some wrap up code (no alerts, confirms, redirects, etc)
    return 'My confirmation messsage'; 
}

“我的确认消息”文本将显示在 Chrome 选择的确认对话框中。 Firefox 记录了这种行为 here

【讨论】:

  • 感谢这对我有用,并且与我当前的设计非常吻合
【解决方案4】:

您不会触发任何事情 - 您只需执行要添加为处理程序的表达式:

window.onunload = function(event) {
    alert("Are you sure 2?");
};

【讨论】:

  • 还是不行,我可以退出页面,提示信息不会出现:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
相关资源
最近更新 更多