2010-05-26 129 views
3

我正在处理任何应用程序,我需要检测用户是否关闭选项卡或浏览器,以便我可以断开用户与其他用户(基本上是其聊天应用程序)的连接。想要检测浏览器关闭事件?

我用: -

window.onbeforeunload = confirmExit; 

function confirmExit() { 
    if(needToConfirm) { 
     return "Leaving this page will end your conversation."; 
    } 

它的做工精细,当我尝试关闭浏览器或标签中,显示了消息“按确定的弹出继续,或取消留在当前页面。 “ 我想在用户点击确定按钮时执行任务,如果他按取消,然后将保持当前页面。

请帮助我:(提前

感谢

ANSHĴ

+0

重新标记,因为这里没有AJAX的景象。 – Agos 2010-05-26 14:35:04

回答

4

这是不可能的。

您可以处理unload事件,并有发送一个AJAX请求,但可能不完全可靠

最好的解决方案是发送一个AJAX聆听每x分钟,如果您停止接收心跳,请考虑断开用户连接。

+0

请给我一个示例代码,这将帮助我 – 2010-05-26 15:02:58

+3

这也将处理的情况下,用户的浏览器崩溃,或失去连接性由于某种原因(网络故障,覆盖率差等)。 – jimbojw 2010-05-26 15:06:10

+1

调用'setTimeout'来每分钟发出一次AJAX请求。 – SLaks 2010-05-26 15:09:05

1

为什么不让客户端定期'ping'服务器让它知道他们仍然存在,如果用户错过了3个ping,那么它会被标记为注销?

2

反过来:当您收到Unload事件时,向服务器发送一条消息,通知用户即将断开连接。服务器等待一段时间然后自动断开连接。

然后,如果用户单击取消并停留在页面上,则会向服务器发送一条消息以通知客户端仍处于活动状态。

不足之处在于,如果用户等待时间太长而无法点击取消,他可能会断开连接。

+1

卸载在任何时候都没有用处,可以说关闭浏览器时,您要求在卸载页面后执行某些操作,但现在浏览器进程本身并不处于活动状态,因此它不会执行卸载功能。所以onbeforeunload是最好的选择.. – 2012-08-06 13:13:58