从iframe的父级调用gwt静态方法

时间:2011-01-13 09:08:21

标签: gwt methods frame

我想知道如何从加载gwt模块的iframe的父级调用GWT静态方法。

作为一个简单的例子,假设我有以下gwt类:

public class Simple {
    public static void showWindow() {
        Window.alert("Hello from the iframe");
    }
}

我创建了一个名为“iFrameHost.html”的html主页,可以运行上面的功能。然后在另一个页面上的一个不相关的GWT模块中,我打电话:

Frame iFrame = new Frame("iFrameHost.html");
RootPanel.get().add(iFrame);

现在如何从父页面调用showWindow()方法?

2 个答案:

答案 0 :(得分:2)

这是基于Gipsy King的回答:

简单类成为:

public class Simple {
    public static void showWindow() {
        Window.alert("Hello from the iframe");
    }
    public static final native void setWindowFunction() /*-{
        $wnd.jsniShowWindow = this.@com.package.path.Simple::showWindow();
    }-*/;
}

然后从父HTML页面调用Simple类: 设置IFrame ID并使用以下方法:

 private native void callShowWindow() /*-{
       $doc.getElementById("iFrameID").contentWindow.jsniShowWindow(); 
 }-*/;

您必须确保iFrame页面已调用setWindowFunction(),但之后您可以从父html页面调用callShowWindow()。

答案 1 :(得分:0)

中的

public static final native void setWindowFunction() /*-{
    $wnd.myFunction = this.@com.package.path.Simple::showWindow();
}-*/;
iframe中的

,无论是使用Native JavaScript方法还是使用纯JavaScript:

window.parent.myFunction();