3

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

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

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

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

我让它工作的方式是:

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

很好,但如果我决定更改 Gwt 的模块名称怎么办?整个过程会中断,并且在一年内可能需要花费很多时间才能弄清楚为什么......

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

谢谢你的帮助!

4

2 回答 2

5

有同样的问题,花了我一段时间,但你必须打电话给它,让它工作:)

这是解决方案

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

问候,斯特凡

于 2012-01-17T13:49:47.140 回答
0

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

于 2011-09-07T17:43:38.220 回答