这是令我疯狂的事情。
我正在尝试检测用户是否关闭或导航离开页面以便对事件执行ajax响应。我已经尝试了几乎所有可能的方法来调用它但没有运气。我唯一能想到的是使用window.open()
方法触发了相关的激活窗口。这会导致任何问题吗?到目前为止我所拥有的:
window.onbeforeunload = function() {
//ajax stuff here
};
但是,我注意到在页面完全加载后这不起作用。在页面加载期间,事件会在最初的几毫秒内触发(如果我打开窗口并尝试立即关闭它),之后将无法启动。
有什么想法吗?
答案 0 :(得分:1)
这也支持旧版本的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;
};
答案 1 :(得分:1)
我曾遇到过这个问题,发现只有在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在评论中提到的,设置超时是一个好主意,以防止窗口因请求需要一段时间而关闭太长时间。请记住,它不适用于所有浏览器......