2013-04-30 95 views
8

使用Google Web Toolkit,我想編寫相當於hard refresh (control + F5)的代碼。GWT中的硬刷新

我不相信(或者知道)GWT的Window.Location會起作用。

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

Window.Location = currentPage; // I don't think it'll be hard refresh 
+0

我可以問你爲什麼需要硬刷新?你有外部資源,還是一切都由GWT處理?因爲在最後一種情況下,我不明白你爲什麼要強制重新加載。 – 2013-04-30 17:10:47

+0

@AndreaBoscolo,我正在考慮添加這個硬刷新,我的代碼將用戶重定向到一個通用的錯誤頁面。但是,我不想將它們重定向到通用錯誤頁面,而是希望重新指引它們再次登錄(硬刷新將實現)。用戶的憑證在15分鐘左右後過期。我不知道如何解決底層問題,因此添加硬刷新比強制用戶打開新瀏覽器並重新登錄更好。 – 2013-04-30 17:43:34

回答

9

要重新加載當前頁面,您需要調用Window.Location.reload()方法。

重新加載當前的瀏覽器窗口。所有的GWT狀態都將丟失。

或者你甚至可以指定自己的JSNI(下如何待辦事項),因爲默認情況下force reload is false

public static native void forceReload() /*-{ 
     $wnd.location.reload(true); 
    }-*/; 
+0

所以'GWT'的Window.Location.reload()不會強制重載?但是如果使用'true'參數,那麼JSNI代碼將會被使用? – 2013-04-30 16:23:49

+0

如果你看一下Window.Location.reload()方法的實現,它不會使用'true'作爲參數。默認情況下它是錯誤的。是本地Javascript的確。如果您有此類靜態方法,您可以將此靜態方法添加到您的Utility類。 – 2013-04-30 16:36:09

+0

尊重,您的答案不應該只包含JSNI代碼嗎?如果'Window.Location.reload()'不能進行硬刷新,請問您可以編輯您的答案嗎? – 2013-04-30 16:40:49

4

根據https://developer.mozilla.org/en-US/docs/DOM/window.location#Methods你需要調用window.location.reload(true)迫使當前頁面的重新加載。

不幸的是,GWT只通過Window.Location.reload()來包裝window.location.reload(),由瀏覽器來從緩存或其他get中取回頁面。這是爲了實現最多的跨瀏覽器解決方案。

從未嘗試,但你應該能夠使用以下內容。

public static native void reload(boolean force) /*-{ 
    $wnd.location.reload(force); 
}-*/; 
1

對於重載GWT頁面,你有兩個選擇:

1)Window.Location.reload();

重新加載當前的瀏覽器窗口。所有的GWT狀態都將丟失。

2)Window.Location.replace(「newurl」);

用新的替換當前的URL。所有的GWT狀態都將丟失。在瀏覽器的歷史記錄中,當前的URL將被新的URL替換。