【问题标题】:How to detect tab closing with javascript in 2021?如何检测 2021 年使用 javascript 关闭的标签页?
【发布时间】:2021-10-06 10:24:56
【问题描述】:

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

Detect browser or tab closing

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

进行此检测的最佳方法是什么?还是在卸载之前吗? 2021 年代码将如何涵盖现代浏览器/行为?

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

【问题讨论】:

标签: javascript jquery confirm


【解决方案1】:

这是重复的。另一个问题的答案指定了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()

【讨论】:

  • bind()unbind() 是不推荐使用的方法
  • 我不确定如何根据您的代码根据客户是否接受提示并离开或取消并留下来区分行为。如果(确认消息)?
  • 另外,提示的自定义文本在所有主要浏览器中都被禁用以避免诈骗。
  • 此外,您显然使用的是遗留代码:Mozilla 指定您应该使用“preventDefault()”而不是 returnValue 属性。 developer.mozilla.org/en-US/docs/Web/API/Window/…
  • 这是重复的。” 正确 - 您应该将其标记为此类(并可选择留下评论)而不是回答,以免分散相关信息并降低整体内容质量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多