浏览器窗口关闭检测

时间:2013-04-15 16:01:16

标签: javascript jquery

这是令我疯狂的事情。

我正在尝试检测用户是否关闭或导航离开页面以便对事件执行ajax响应。我已经尝试了几乎所有可能的方法来调用它但没有运气。我唯一能想到的是使用window.open()方法触发了相关的激活窗口。这会导致任何问题吗?到目前为止我所拥有的:

window.onbeforeunload = function() {
   //ajax stuff here
};

但是,我注意到在页面完全加载后这不起作用。在页面加载期间,事件会在最初的几毫秒内触发(如果我打开窗口并尝试立即关闭它),之后将无法启动。

有什么想法吗?

2 个答案:

答案 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在评论中提到的,设置超时是一个好主意,以防止窗口因请求需要一段时间而关闭太长时间。请记住,它不适用于所有浏览器......