2011-10-03 70 views
2

我的GWT應用程序正被添加到iframe中。我在應用程序中有一個按鈕,然後應該指向另一個頁面。目前,我是這樣做的:GWT - 突破iframe

Window.Location.assign("http://testpage.com"); 

現在的問題是新頁面正在加載到iframe中。有沒有辦法重新加載整個頁面以避免產生這種效果?

我已經閱讀了一些帖子在這裏的stackoverflow,但沒有一個在GWT。我希望有人已經有了這個問題併成功地解決了它。

感謝您的任何建議!

回答

3

我不相信GWT有一個內置函數,你可以爲此調用。

JavaScript中的常用成語來做到這一點看起來像這樣

if (top.location!= self.location) { //test if in an iframe 
    top.location = self.location.href; //if so, break out 
} 

這不會在GWT直接工作,雖然你可以把它放在你的主要的HTML頁面,可能是在<head>的其餘部分之前應用程序加載 - 這會立即將您踢出iframe,而不是等待應用程序加載,爆發,然後等待應用程序再次加載。

如果你真的想運行GWT檢查,也許是因爲你只是有時想打出來,你需要在很短的JSNI方法來增加這個功能,這樣的事情:

public native void breakOut() /*-{ 
    if ($wnd.top.location != $wnd.location) { 
     $wnd.top.location = $wnd.location.href; 
    } 
}-*/ 

請注意使用$ wnd來引用應用程序的窗口對象。有關編寫JSNI的更多詳細信息,請參見http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html。不要期望這個函數返回 - 它觸發瀏覽器卸載這個頁面並加載另一個頁面。

+0

如果我這樣做你的建議:首先我打電話breakout();然後我做一個Window.Location.assign(「http://something.com」);行爲是,當前窗口正在打破iframe,就是這樣。它不會切換到http://something.com站點。你有什麼想法爲什麼不會發生? – mkn

+0

好吧,我這樣做:$ wnd.top.location = $ wnd.location = link; – mkn

+0

是的,這就是你想要的 - breakOut()函數可能不會返回,Window.assign也不會,並且由於Window.assign的代碼已經與$ wnd.location對象進行交互,所以只需修改breakOut代碼 - - 你已經完成了。 –

-1

您可以使用Location.replace("http://testpage.com");將瀏覽器重定向到具有GWT的其他URL。

0

這是基於這樣的理念科林提到應該做你想要什麼分配的定製版本,它也會,如果你在一個iframe是不行的:基於簡化的實施:

public static native void assignTop(String newURL) /*-{ 
    $wnd.top.location.assign(newUrl); 
}-*/ 

編輯科林的建議。謝謝!

+0

尚未測試您的解決方案,但謝謝。儘管如此,你會得到贊同:) – mkn

+0

你可以放棄if/else,因爲如果'$ wnd.top.location == $ wnd.location',那麼'$ wnd.top.location.assign'與' $ wnd.location.assign'。 –