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