GWT - 突破iframe

时间:2011-10-03 23:53:37

标签: gwt iframe

我的GWT应用程序正在添加到iframe中。我在应用程序中有一个按钮,然后应该指向另一个页面。目前,我这样做:

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

现在的问题是新页面正在加载到iframe中。有没有办法重新加载整个页面以避免产生这种影响?

我已经在stackoverflow上阅读了一些帖子,但没有一个在GWT中。我希望有人已经遇到问题并成功解决了。

感谢您的任何建议!

3 个答案:

答案 0 :(得分: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。不要指望此函数返回 - 它会触发浏览器卸载此页面并加载另一个页面。

答案 1 :(得分:0)

以下是基于Colin提及应该按照您的意图进行操作的自定义版本,如果您不在iframe中,它也会有效:

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

编辑:基于科林的建议简化实施。谢谢!

答案 2 :(得分:-1)

您可以使用Location.replace("http://testpage.com");将浏览器重定向到使用GWT的其他网址。