从外部脚本到GWT父脚本的postMessage

postMessage from external script to GWT parent

本文关键字:脚本 postMessage GWT 从外部      更新时间:2023-09-26

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

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

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

,同时监听GWT应用程序中的消息事件。这不起作用,因为GWT的javascript自己在iframe中运行。

我让它工作的方法是:

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

很好,它的工作,但如果我决定改变我的Gwt的模块名称?整个过程将会中断,在一年之内,人们可能会绞尽脑汁去找出原因。

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

谢谢你的帮助!

有同样的问题,花了我一段时间,但你必须调用这个,让它工作:)

这是解决方案

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

问候,Stefan

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