2013-02-10 47 views
0

我的应用程序依赖于能够设置用户在线/离线状态。window.onbeforeunload不总是开火吗?

我已经通过使用window.onbeforeunload查看用户何时离开页面来解决此问题。

问题是,下面的代码并不总是得到执行,因此仍然说有些人在离开页面时处于联机状态。

这是我当前的代码:

window.onbeforeunload = function (event) { 
    $.ajax({ 
     type: 'GET', 
     url: './changeStatus.php?cid=' + ccID + '&status=0', 
     contentType: "application/json", 
     dataType: 'json', 
     cache: false, 
     async: false, 
     success: function (data) {}, 
     error: function (e) { 
      //console.log(e); 
     } 
    }); 
    return; 
}; 

任何想法如何,我可以迫使这总是得到执行? (在所有浏览器上)

+1

它应该在所有主流浏览器中支持。什么时候它不是射击? – adeneo 2013-02-10 22:15:03

+0

有时在IE中似乎 – Laine 2013-02-10 22:15:18

+0

IE介绍了这个,并且从IE4开始支持据我所知?您需要在未触发的情况下添加更多细节。另一方面,在IE中,问题通常是,即使您尝试通过禁用缓存来延迟缓存(这不会工作顺便),ajax函数的速度也不足以在页面关闭之前发送请求。 – adeneo 2013-02-10 22:15:53

回答

0

脚本可能总是在页面关闭时执行,但这并不意味着它总是成功地调用服务器。

例如,如果用户在关闭页面之前断开了互联网连接,脚本就不能向服务器发送任何内容。每当关闭页面时,您都无法依靠从浏览器获取电话。

当用户上次听到时,您可以跟踪服务器,以便您可以在没有请求任何页面的情况下将用户设置为脱机。另一种选择是只要用户在页面上就频繁地向服务器发送请求,并且当请求停止时,服务器知道用户已经离开了。