JavaScript检查浏览器窗口何时关闭

19

有没有人知道用 Javascript 如何检测浏览器窗口关闭并弹出确认对话框,询问用户是否确认退出浏览器或改变主意留下?


您所说的浏览器窗口是指页面窗口还是整个浏览器? - Joe Phillips
可能是浏览器窗口关闭事件的重复问题。 - Danubian Sailor
5个回答

27

1
@Anon 不对,confirm() 返回的是一个布尔值,你的 onbeforeunload 处理程序需要返回一个字符串。 - Chad Grant
我要给这个点踩,因为如果你尝试在页面上跳转到另一个链接,会出现“你确定吗?”的提示。 - ElHaix
就DOM而言,离开页面和关闭浏览器窗口没有区别。@ElHaix - Chad Grant
是的...这就是问题所在。那么如果页面上有问题怎么办?用户点击链接时会显示弹出窗口。它只应该在他们关闭页面时发生。我通过检查新浏览器页面加载时的历史记录来解决了这个问题,但这很薄弱,因为他们在检查页面之前可能会去其他网站。 - ElHaix
beforeunload在iOS中不再受支持。还有其他解决方案吗? - Kalleshwar Kalshetty
显示剩余3条评论

2

这里的文档建议监听onbeforeunload事件和/或在window上添加事件侦听器。

window.addEventListener('beforeunload', function(e) {}, false);

你也可以通过在 window 上添加 .onunload.onbeforeunload 属性并填充一个 函数函数引用 来实现。虽然不同浏览器的行为不一致,但是这个 函数 可以返回一个值,当确认是否离开页面时,浏览器会显示该值。

1
这对我有用:
function closeWin(){
 var exit = confirm("Do you want to leave this window?");  
     if(exit==true){
        //do something before closing;
     }
}    

body onbeforeunload="closeWin()" 

1
如果浏览器在页面关闭后仍然运行,并且浏览器处理body元素的“onbeforeunload”事件(有时会被禁用),并且浏览器允许弹出窗口或消息框以及从该事件返回false以防止页面更改,则可能会发生这种情况。
例如,在启用JavaScript的任何stackoverflow页面上开始输入评论,然后导航离开该页面。

1

这也能工作,除非在IE8中

$(window).bind('beforeunload', function (e) {
        // code to execute when browser is closed
        e.$.post("func.php", { action: 'action', id_userMsg: '<?php echo $id_user; ?>' });      

    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接