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

从iframe的父级调用gwt静态方法,gwt,methods,frame,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 iFra

我想知道如何从加载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()
方法?

在简单类中:

public static final native void setWindowFunction() /*-{
    $wnd.myFunction = this.@com.package.path.Simple::showWindow();
}-*/;
在iframe中,无论是在本机JavaScript方法中还是在纯JavaScript中:

window.parent.myFunction();

这是基于吉卜赛·金的回答:

简单类变成:

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页面调用简单类: 设置IFrame id并使用以下方法:

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

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

感谢您的回复。很接近,但不完全是我想做的。我想从父页面调用iFrame的方法,而不是从iFrame调用父页面的方法。我已经更新了我的问题,以显示我是如何尝试使用您的代码的,但不幸的是,我在javascript方面非常弱,无法使其工作。好的,我已经修改了您的答案。如果要从父页面调用函数,请给iframe一个id,然后调用:$doc.getElementById(“iFrameID”).contentWindow.myFunction()@Richard你能用你的最终解决方案写一个答案然后接受吗?看,你应该用$entry(…)包装你的函数引用@Malli不要通过编辑旧帖子提问,因为可能没有人会看到你的问题。创建一个单独的问题,其中将包含这个答案的链接,并询问为什么它在Firefox中工作而在chrome中不工作。