如何在 2021 年检测使用 javascript 关闭的标签页?

问题描述

对此最受欢迎的问题有很多答案,但遗憾的是我找不到一个可以正常工作的问题。 大多数回复来自 10 年前,有些甚至不起作用:

Detect browser or tab closing

同一位代码也有许多变体(例如,有些在代码添加了“e.returnValue='';”,而其他许多则没有。

进行这种检测的最佳方法是什么?还是之前卸载的?代码在 2021 年会是什么样子以涵盖现代浏览器/行为?

(为了避免XY问题,如果用户试图关闭页面,我想显示一个确认弹出窗口。弹出窗口很容易,检测不是。)

解决方法

这是重复的。另一个问题的答案指定了 onunloadbeforeunload 事件,它们都具有非常好的浏览器兼容性(onunloadbeforeunload)。

我在浏览器控制台中尝试了 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()