2013-10-17 39 views
0

我想檢測瀏覽器/選項卡關閉事件,然後調用struts操作。 當我在瀏覽器中只有一個選項卡時,我可以執行它。下面 是我的JavaScript代碼來檢測關閉事件:在Internet Explorer中打開多個選項卡時檢測瀏覽器關閉事件

<script type="text/javascript"> 
function loadOut() { 
     if ((window.event.clientX < 0) || (window.event.clientY < 0)) { 

     document.forms[0].action="Logout.do"; 
     document.forms[0].submit(); 
    } 
} 
</script> 

我使用onbeforeunload捕獲瀏覽器關閉事件。

<body onbeforeunload="loadOut();"> 

當我關閉布勞爾只有一個標籤,或者當我閉上標籤本身,那麼該事件將觸發作爲X或Y座標將是< 0(這將幫助我在檢查我只關閉瀏覽器而不瀏覽任何其他鏈接)。

但是,在打開多個選項卡的情況下,我從Internet Explorer中得到「是否關閉所有選項卡或當前選項卡」彈出窗口。當點擊選項時,X和Y座標都不會保留< 0. 並且不會觸發操作。

請幫我解決這個問題。

P.S:我可以選擇移除瀏覽器的設置,彈出窗口,但只是想知道是否有任何其他方式

+0

窗口卸載事件 - https://www.google.co.in/search?q=window+ unload&oq = window + unload&aqs = chrome..69i57j0l5.2498j0j7&sourceid = chrome&espv = 210&es_sm = 122&ie = UTF-8 –

回答

0

我想你在這裏混淆的東西。

才能登錄的人時,他關閉,你應該使用會話cookie

以註銷,當你關閉一個標籤,你應該添加一個安全令牌成越來越發送到的HTML源代碼瀏覽器服務器上的每個交互。

爲了在沒有任何交互的特定時間之後記錄某人,您可以簡單地減少會話保持活動時間。結合阿賈克斯心跳或類似的東西,你可以保持會話活着,而至少有一個標籤仍然打開。

onbeforeunload的目的是告訴用戶,他還沒有提交一些東西,但他還沒有像提交表格那樣填寫但尚未提交。谷歌郵件這樣做,如果郵件刪除等事件尚未轉移到服務器上。

客戶端應該總是可以選擇中斷與服務器的所有連接。這就是爲什麼使用onbeforeunload

你可能想看看另一件事是,當你不能做任何事情的onblur

+0

現在不要談論會話。我只想在關閉瀏覽器或選項卡時觸發事件/動作(並且不導航到任何其他頁面) –

+0

我想說的是,除非您保持對服務器的開放套接字,否則您的特定目標是不可能的並檢測套接字是否關閉或以不同方式監視非活動狀態。 – GottZ

+0

我想我可能有另一種方式來解決我的問題,跟蹤會話註銷時間,我正在調用一個函數n次,以將會話屬性更新爲當前的日期和時間。並且使用HttpSessionListener,我可以重寫sessionDestroyed方法來獲取保存的註銷時間值,並在數據庫中更新相同的值。 –

相關問題