2011-03-23 56 views

回答

7

你爲什麼要這樣做?一般來說,GWT應用程序不會更改頁面 - 因此它們通常是SPA1(單頁應用程序)

當您從服務器加載新頁面時,您將失去該頁面上的狀態。您可以更改URL的散列部作爲將不會返回到服務器,就像這樣:

String newURL = Window.Location.createUrlBuilder().setHash("newhash").buildString(); 
Window.Location.replace(newURL); 

但是,如果你要做到這一點,我建議考慮看看GWT的MVP框架,它支持使用哈希令牌管理位置。

http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html

+0

謝謝你的有用答案。我需要更改網址而不提交,所以用戶可以複製這個並給朋友。例如wikimapia.org設置在url當前座標http://wikimapia.org/#lat=54.3885546&lon=25.9799194&z=11&l=0&m=b – user672649 2011-03-23 10:09:21

+0

這有助於我,因爲我有一個鏈接,調用另一個GWT應用程序。我使用Window.Location.assign() 謝謝你們! – agentcurry 2013-03-12 18:28:34

9

如果你想改變的東西是不是在哈希,比如你要在URL中改變一個參數,你可以做到這樣!

private void someMethod() { 
    String newURL = Window.Location.createUrlBuilder().setParameter("someParam", "someValue").buildString(); 
    updateURLWithoutReloading(newURL); 
} 

private static native void updateURLWithoutReloading(String newUrl) /*-{ 
    $wnd.history.pushState(newUrl, "", newUrl); 
}-*/; 

然後,你可以註冊一個處理使用前進和後退按鈕瀏覽器作爲證明here用戶的功能。

+1

這實際上是正確答案,標記爲正確的答案會導致重新加載。 – 2014-10-23 20:23:25

2
$wnd.history.pushState(newUrl, "", newUrl); 

在HTML5瀏覽器中很好地工作。不在IE8或IE9中!