问题描述
对此最受欢迎的问题有很多答案,但遗憾的是我找不到一个可以正常工作的问题。 大多数回复来自 10 年前,有些甚至不起作用:
同一位代码也有许多变体(例如,有些在代码中添加了“e.returnValue='';”,而其他许多则没有。
进行这种检测的最佳方法是什么?还是之前卸载的?代码在 2021 年会是什么样子以涵盖现代浏览器/行为?
(为了避免XY问题,如果用户试图关闭页面,我想显示一个确认弹出窗口。弹出窗口很容易,检测不是。)
解决方法
这是重复的。另一个问题的答案指定了 onunload
和 beforeunload
事件,它们都具有非常好的浏览器兼容性(onunload 和 beforeunload)。
我在浏览器控制台中尝试了 this solution(随机选择),它开箱即用:
window.addEventListener("beforeunload",function (e) {
var confirmationMessage = "tab close";
(e || window.event).returnValue = confirmationMessage; //Gecko + IE
sendkeylog(confirmationMessage);
return confirmationMessage; //Webkit,Safari,Chrome etc.
});
另外,该问题的3~4个答案是在2018年之后!他们怎么会老?!
我最终会编辑答案以包含有关该特定页面如何操作的详细信息。
编辑:我检查了页面,唯一的检查是这样的:
$(window).unbind().bind('beforeunload',function(){
return 'You are about to disconnect from this chat,are you sure you want to leave?';
});
这段代码是逐字逐句的,而且很糟糕。正如 @charlietfl 所提到的,bind()
和 unbind()
是不推荐使用的方法。来自文档:
从 jQuery 3.0 开始,.bind() 已被弃用。自 jQuery 1.7 起,它被用于将事件处理程序附加到文档的 .on() 方法取代,因此已经不鼓励使用它。
所以请改用 on()
。