1

这是让我发疯的事情。

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

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

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

有任何想法吗?

4

2 回答 2

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;
};
于 2013-04-15T16:03:32.360 回答
1

我曾经遇到过这个问题,发现只有通过设置async : falseajax 才能对我有用,如下所示:

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 在评论中提到的那样,最好设置一个超时时间,以防止在请求需要一段时间的情况下关闭窗口的时间过长。请记住,它不适用于所有浏览器...

于 2013-04-15T16:09:00.180 回答