如何捕获浏览器窗口关闭事件?
2022-08-30 02:19:00
我想捕获浏览器窗口/选项卡关闭事件。我用jQuery尝试了以下内容:
jQuery(window).bind(
"beforeunload",
function() {
return confirm("Do you really want to close?")
}
)
但它也适用于表单提交,这不是我想要的。我想要一个仅在用户关闭窗口时触发的事件。
我想捕获浏览器窗口/选项卡关闭事件。我用jQuery尝试了以下内容:
jQuery(window).bind(
"beforeunload",
function() {
return confirm("Do you really want to close?")
}
)
但它也适用于表单提交,这不是我想要的。我想要一个仅在用户关闭窗口时触发的事件。
每当用户出于任何原因离开您的网页时,都会触发该事件。beforeunload
例如,如果用户提交表单、单击链接、关闭窗口(或选项卡)或使用地址栏、搜索框或书签转到新页面,则将触发该消息。
您可以使用以下代码排除表单提交和超链接(其他框架除外):
var inFormOrLink;
$('a').on('click', function() { inFormOrLink = true; });
$('form').on('submit', function() { inFormOrLink = true; });
$(window).on("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
对于早于 1.7 的 jQuery 版本,请尝试以下操作:
var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });
$(window).bind("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
该方法不适用于事件,因此,如果添加新窗体,则还需要将处理程序绑定到该窗体。live
submit
请注意,如果其他事件处理程序取消了提交或导航,则在稍后实际关闭窗口时,您将丢失确认提示。您可以通过在 和 事件中记录时间并检查是否在几秒钟后发生来解决此问题。submit
click
beforeunload
也许只是在表单的事件处理程序中取消绑定事件处理程序:beforeunload
submit
jQuery('form').submit(function() {
jQuery(window).unbind("beforeunload");
...
});