我刚刚发现使用html5的postMessage从一个iframe到另一个iframe进行通信的乐趣。
但是,我遇到的问题是我正在运行一个加载iframe的GWT应用程序(带有外部域)。从该外部域我现在想要将消息发回GWT应用程序。天真地我第一次尝试:
parent.postMessage('hello', '*');
从外部脚本中,在我的GWT应用程序中侦听消息事件。这不起作用,因为GWT的javascript在iframe中运行。
我开始工作的方式是:
document.getElementById(myGwtModuleName).postMessage('hello', '*');
很好,它正在工作,但如果我决定更改我的Gwt的模块名称怎么办?整个过程会破裂,在一年之内,可能需要花很多时间去弄清楚为什么......
有没有更好的方法将消息发回GWT应用程序?或者我怎样才能弄清楚Gwt的模块名称在运行时是什么?在这种情况下,我可以将它作为参数传递给iframe。
感谢您的帮助!
答案 0 :(得分:4)
遇到了同样的问题并带走了我,但你必须打电话给它,让它工作:)
这是解决方案
public final native void doPost() /*-{
$wnd.parent.postMessage("Hello parent from your GWT iFrame!", '*');
}-*/;
此致 斯蒂芬
答案 1 :(得分:0)
如何将侦听器添加到当前窗口(例如,包含GWT脚本的窗口)。 您应该使用$ doc或$ wnd变量作为侦听器的目标。 $ doc变量始终是对包含GWT应用程序的引导脚本的文档的引用。