2013-02-10 36 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

腳本可能總是在頁面關閉時執行,但這並不意味着它總是成功地調用服務器。

例如,如果用戶在關閉頁面之前斷開了互聯網連接,腳本就不能向服務器發送任何內容。每當關閉頁面時,您都無法依靠從瀏覽器獲取電話。

當用戶上次聽到時,您可以跟蹤服務器,以便您可以在沒有請求任何頁面的情況下將用戶設置爲脫機。另一種選擇是隻要用戶在頁面上就頻繁地向服務器發送請求,並且當請求停止時,服務器知道用戶已經離開了。