postMessage从外部脚本到GET父级

时间:2011-09-01 10:25:16

标签: javascript gwt iframe postmessage

我刚刚发现使用html5的postMessage从一个iframe到另一个iframe进行通信的乐趣。

但是,我遇到的问题是我正在运行一个加载iframe的GWT应用程序(带有外部域)。从该外部域我现在想要将消息发回GWT应用程序。天真地我第一次尝试:

parent.postMessage('hello', '*');

从外部脚本中,在我的GWT应用程序中侦听消息事件。这不起作用,因为GWT的javascript在iframe中运行。

我开始工作的方式是:

document.getElementById(myGwtModuleName).postMessage('hello', '*');

很好,它正在工作,但如果我决定更改我的Gwt的模块名称怎么办?整个过程会破裂,在一年之内,可能需要花很多时间去弄清楚为什么......

有没有更好的方法将消息发回GWT应用程序?或者我怎样才能弄清楚Gwt的模块名称在运行时是什么?在这种情况下,我可以将它作为参数传递给iframe。

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

遇到了同样的问题并带走了我,但你必须打电话给它,让它工作:)

这是解决方案

    public final native void doPost() /*-{
    $wnd.parent.postMessage("Hello parent from your GWT iFrame!", '*');
}-*/;

此致 斯蒂芬

答案 1 :(得分:0)

如何将侦听器添加到当前窗口(例如,包含GWT脚本的窗口)。 您应该使用$ doc或$ wnd变量作为侦听器的目标。 $ doc变量始终是对包含GWT应用程序的引导脚本的文档的引用。