浏览器窗口关闭检测
Browser Window close detection
这是一件让我抓狂的事。
我试图检测用户是否关闭或导航远离页面,以便对事件进行ajax响应。我已经尝试了几乎所有可能的方法来调用它,但没有运气。我能想到的唯一一件事是,有问题的激活窗口是使用:window.open()
方法触发的。这会引起什么问题吗?到目前为止我有什么:
window.onbeforeunload = function() {
//ajax stuff here
};
然而,我注意到这在页面完全加载后不起作用。在页面加载期间,该事件在最初的几毫秒内触发(如果我打开窗口并试图立即关闭它),之后将无法工作。
任何想法?
我曾经遇到过这个问题,发现它只通过在ajax上设置async : false
来为我工作,像这样:
jQuery(window).bind('beforeunload', function () {
jQuery.ajax({
url: 'your.url',
async: false,
data: yourdata
timeout: 2000 // or whatever timeout in milliseconds you want
success: function(data){
// Do whatever you want
}
});
});
正如Ian在评论中提到的,设置一个超时是一个好主意,以防止在请求需要一段时间的情况下窗口花费太长时间才能关闭。并不是所有的浏览器都可以使用
这也支持旧版本的IE和Firefox。
window.onbeforeunload = function (e) {
var message = "Your confirmation message goes here.",
e = e || window.event;
// For IE and Firefox
if (e) {
e.returnValue = message;
}
// For Safari
return message;
};
相关文章:
- 在重新加载之后检测窗口的存在
- 从子项(iframe)检测窗口关闭命令
- 移动 Safari 垂直滚动 - 如何在 Javascript 中检测窗口何时停止移动
- 如何使用Javascript检测窗口宽度
- 火狐扩展程序检测窗口任务栏位置
- 在这种情况下,检测窗口加载的有效方法
- jQuery:如何实时检测窗口宽度
- 无法检测窗口是否已加载
- 使用JavaScript检测窗口大小并输出到脚本的链接
- JavaScript:检测窗口开始改变位置的时刻
- Javascript(没有jQuery) -谷歌Chrome有时会错误地检测窗口宽度
- 在检测窗口宽度后显示HTML和PHP代码
- 如何使用Backbone-Views检测窗口事件?
- 检测窗口.打印是确认或取消
- 当通过window.open打开时检测窗口关闭事件
- 如何使用jQuery检测窗口大小
- 检测窗口大小和执行功能与jquery
- 在jQuery中动态检测窗口宽度
- 如何在javascript中检测窗口的全部高度
- 检测窗口调整大小事件何时完成