2011-03-05 33 views
3

刷新瀏覽器我有一個GWT應用程序,我希望當用戶離開應用程序強行註銷並刪除任何數據等GWT檢測是closeHandler

要做到這一點我使用的是closeHandler運行一些代碼和使用Window.addCloseHandler註冊它。

我注意到,當點擊刷新按鈕時,onClose方法會運行,但我一直無法區分這個事件和用戶關閉瀏覽器的地方。如果是刷新,我不想做註銷等,我只想在用戶關閉瀏覽器/選項卡或從網站導航時執行此操作。

有人知道我該怎麼做嗎?

回答

0

你試過

< BODY onunload的= 「腳本名」>

在你的GWT的託管/啓動HTML文件?

我在想,如果您在託管文件中定義了一個映射「哈希」(即JavaScript僞哈希),然後通過Dictionary類訪問GWT中的「哈希」,您可以更新該哈希中的值作爲用戶通過gwt app進展。這意味着,您的編程風格將要求您將用戶進度上的里程碑登錄到此地圖上。

當用戶關閉瀏覽器頁面時,將啓動啓動html頁面的onunload腳本。該腳本將訪問地圖以找出需要更新到服務器的內容,或者要啓動的其他URL。

0

我也是如果有人得到一個解決方案(GWT/Java方)。 也許我們可以用HistoryListerner做到這一點? 1-爲當前查看頁面設置一個標誌。 2 - 當ClosingHandler事件發生時,在服務器端啓動「超時」(例如10秒) 3 - 如果在這段時間內,您從HistoryListerner獲得了一個帶有相同最後一個標誌的按摩,所以這只是一次刷新。斷開的 如果計時器已經結束...

是不是一個很好的解決方案,但我認爲這是很容易做到......如果有人有一個更好的...

1

沒有辦法區分'刷新''關閉'。但是,您可以設置保存最後一次CloseHandler呼叫時間的cookie,並在加載模塊時檢查,如果此時間足夠長以在顯示頁面之前清除信息。

您可以使用以下實用程序類(BrowserCloseDetector)來完成此操作。以下是在onModuleLoad上使用它的示例。

測試線

@Override 
public void onModuleLoad() { 
    if (BrowserCloseDetector.get().wasClosed()) { 
     GWT.log("Browser was closed."); 
    } 
    else { 
     GWT.log("Refreshing or returning from another page."); 
    } 
} 

實用類

import com.google.gwt.user.client.Cookies; 
import com.google.gwt.user.client.Window; 

public class BrowserCloseDetector { 
    private static final String COOKIE = "detector"; 
    private static BrowserCloseDetector instance; 

    private BrowserCloseDetector() { 
     Window.addWindowClosingHandler(new Window.ClosingHandler() { 
      public void onWindowClosing(Window.ClosingEvent closingEvent) { 
       Cookies.setCookie(COOKIE, ""); 
      } 
     }); 
    } 

    public static BrowserCloseDetector get() { 
     return (instance == null) ? instance = new BrowserCloseDetector() : instance; 
    } 

    public boolean wasClosed() { 
     return Cookies.getCookie(COOKIE) == null; 
    } 
}