我尝试了很多方法来通过 jQuery 或 JavaScript 检测浏览器关闭事件。但是,不幸的是,我无法检测到关闭。该onbeforeunload
和onunload
方法也没有工作。
如何检测的窗口close
,unload
或beforeunload
事件?
我尝试了很多方法来通过 jQuery 或 JavaScript 检测浏览器关闭事件。但是,不幸的是,我无法检测到关闭。该onbeforeunload
和onunload
方法也没有工作。
如何检测的窗口close
,unload
或beforeunload
事件?
你试过这个代码吗?
window.onbeforeunload = function (event) {
var message = 'Important: Please click on \'Save\' button to leave this page.';
if (typeof event == 'undefined') {
event = window.event;
}
if (event) {
event.returnValue = message;
}
return message;
};
$(function () {
$("a").not('#lnkLogOut').click(function () {
window.onbeforeunload = null;
});
$(".btn").click(function () {
window.onbeforeunload = null;
});
});
第二个功能是可选的,以避免在单击#lnkLogOut
和.btn
元素时出现提示。
还有一件事,自定义提示在 Firefox 中不起作用(即使在最新版本中也是如此)。有关它的更多详细信息,请转到此线程。
参考了各种文章并进行了一些反复试验,最终我开发了这个非常适合我的想法。
这个想法是检测关闭浏览器触发的卸载事件。在这种情况下,鼠标将移出窗口,指向关闭按钮 ('X')。
$(window).on('mouseover', (function () {
window.onbeforeunload = null;
}));
$(window).on('mouseout', (function () {
window.onbeforeunload = ConfirmLeave;
}));
function ConfirmLeave() {
return "";
}
var prevKey="";
$(document).keydown(function (e) {
if (e.key=="F5") {
window.onbeforeunload = ConfirmLeave;
}
else if (e.key.toUpperCase() == "W" && prevKey == "CONTROL") {
window.onbeforeunload = ConfirmLeave;
}
else if (e.key.toUpperCase() == "R" && prevKey == "CONTROL") {
window.onbeforeunload = ConfirmLeave;
}
else if (e.key.toUpperCase() == "F4" && (prevKey == "ALT" || prevKey == "CONTROL")) {
window.onbeforeunload = ConfirmLeave;
}
prevKey = e.key.toUpperCase();
});
ConfirmLeave 函数会给出弹出的默认消息,以防需要自定义消息,然后在ConfirmLeave() 函数中返回要显示的文本而不是空字符串。
在 Linux chrome 环境下尝试以下代码对我有用。在运行之前确保 jquery 附加到文档。
$(document).ready(function()
{
$(window).bind("beforeunload", function() {
return confirm("Do you really want to close?");
});
});
对于简单的遵循以下步骤:
它应该显示以下图片:
嗨,我有一个棘手的解决方案,它仅适用于新浏览器:
只需打开一个 websocket 到您的服务器,当用户关闭窗口时,将触发 onclose 事件
以下脚本将在 Chrome 和 IE 上给出消息:
<script>
window.onbeforeunload = function (e) {
// Your logic to prepare for 'Stay on this Page' goes here
return "Please click 'Stay on this Page' and we will give you candy";
};
</script>
铬合金
IE
在 Firefox 上,您将收到通用消息
机制是同步的,所以没有服务器调用延迟会起作用,你仍然可以准备一个像模态窗口这样的机制,如果用户决定留在页面上,但没有办法阻止他离开。
在评论中回答问题
F5将再次触发事件,所以将Atl+ F4。