2014-03-26 71 views
0

我有一個角度應用程序,其中,當用戶登錄時,我將其狀態設置爲「聯機」db。 如果此用戶關閉瀏覽器,而不是執行菜單操作註銷,我如何將他的狀態更新爲「脫機」? 我試圖使用「$ window.onbeforeunload」事件並調用Web服務來註銷用戶。 代碼運行,但似乎執行將被瀏覽器「切斷」:服務從未被稱爲「真正」。角度:關閉窗口上的用戶註銷

+0

您是否設置了服務器端會話?如果是這樣,您應該能夠在會話過期時運行代碼,而不用擔心在UI中擔心它。 – JeffryHouser

+0

好的,謝謝我會嘗試使用您建議的解決方案 – girtri

回答

2

需要注意的一件事是,onbeforeunload事件不被所有瀏覽器支持,這是一個非標準事件。

而且,你的用例具有發射每當用戶提交表單,導航出頁的該事件的警告等

你需要從onbeforeunload過濾掉那些「事件」以確保您的邏輯只能在實際窗口關閉時執行。

你可以做到這一點使用jQuery:

var ignore; 
    $('a').live('click', function() { ignore = true; }); 

    etc... 

    $(window).bind("beforeunload", function() { 
     return ignore || confirm("Do you want to close the browser/tab?"); 
    }); 

的問題是,即使有這個,單擊確定任何後續代碼後永遠不會被執行,因爲......嗯,窗口被有效地關閉:)

要做到這一點,唯一的方法是,如果出於某種尷尬的原因,您可以在執行邏輯時阻止窗口關閉,然後關閉它。

FORTUNATELY這是不可能的。

因此,這使得你在服務器端正確執行此操作的唯一方法,檢查會話過期或類似的事情。

2

使用WebSocket連接或輪詢,並監聽它關閉/停止在服務器上。

作爲@安東尼奧說,你不能依靠客戶端一致地通知你,它正在關閉。

相關問題