2010-05-26 133 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