浏览器窗口关闭检测

Browser Window close detection

本文关键字:检测 窗口 浏览器      更新时间:2023-09-26

这是一件让我抓狂的事。

我试图检测用户是否关闭或导航远离页面,以便对事件进行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;
};