刷新瀏覽器我有一個GWT應用程序,我希望當用戶離開應用程序強行註銷並刪除任何數據等GWT檢測是closeHandler
要做到這一點我使用的是closeHandler運行一些代碼和使用Window.addCloseHandler註冊它。
我注意到,當點擊刷新按鈕時,onClose方法會運行,但我一直無法區分這個事件和用戶關閉瀏覽器的地方。如果是刷新,我不想做註銷等,我只想在用戶關閉瀏覽器/選項卡或從網站導航時執行此操作。
有人知道我該怎麼做嗎?
刷新瀏覽器我有一個GWT應用程序,我希望當用戶離開應用程序強行註銷並刪除任何數據等GWT檢測是closeHandler
要做到這一點我使用的是closeHandler運行一些代碼和使用Window.addCloseHandler註冊它。
我注意到,當點擊刷新按鈕時,onClose方法會運行,但我一直無法區分這個事件和用戶關閉瀏覽器的地方。如果是刷新,我不想做註銷等,我只想在用戶關閉瀏覽器/選項卡或從網站導航時執行此操作。
有人知道我該怎麼做嗎?
你試過
< BODY onunload的= 「腳本名」>
在你的GWT的託管/啓動HTML文件?
我在想,如果您在託管文件中定義了一個映射「哈希」(即JavaScript僞哈希),然後通過Dictionary類訪問GWT中的「哈希」,您可以更新該哈希中的值作爲用戶通過gwt app進展。這意味着,您的編程風格將要求您將用戶進度上的里程碑登錄到此地圖上。
當用戶關閉瀏覽器頁面時,將啓動啓動html頁面的onunload腳本。該腳本將訪問地圖以找出需要更新到服務器的內容,或者要啓動的其他URL。
我也是如果有人得到一個解決方案(GWT/Java方)。 也許我們可以用HistoryListerner做到這一點? 1-爲當前查看頁面設置一個標誌。 2 - 當ClosingHandler事件發生時,在服務器端啓動「超時」(例如10秒) 3 - 如果在這段時間內,您從HistoryListerner獲得了一個帶有相同最後一個標誌的按摩,所以這只是一次刷新。斷開的 如果計時器已經結束...
是不是一個很好的解決方案,但我認爲這是很容易做到......如果有人有一個更好的...
沒有辦法區分'刷新''關閉'。但是,您可以設置保存最後一次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;
}
}