如何将GWT模块添加到动态创建的Iframe中

时间:2017-06-01 08:17:30

标签: javascript iframe gwt

处理这种情况的最佳方法是什么?

  • 代码明智我想拥有2个单独的GWT模块。此page
  • 中定义的模块
  • 以单个下载方式下载两个模块,作为js文件。
  • 在动态创建的iframe中运行其中一个模块。

详细说明:

我有一个名为'embed'的GWT模块,它生成embed.nocache.js文件。 我有另一个名为'widget'的GWT模块,它生成widget.nocache.js文件。

我将embed.nocache.js添加到我的HTML页面。这会在HTML页面中添加一个名为“widget”的链接。 点击此链接后,会打开iframe(例如,widget.html)。 widget.html有一个指向widget.nocache.js的链接。该文件被下载,在iframe中执行并将水平面板放入iframe。

现在我需要删除widget.nocache.js文件的单独下载。

假设我在embed中继承了'widget'模块,它被编译并一起下载。如何在动态创建的iframe中仅初始化与“小部件”相关的javascript?

可以创建自定义链接器帮助吗?

1 个答案:

答案 0 :(得分:0)

像这样的东西。如果您的页面上已经有IFrame,那么只需将其加载到该页面即可。只要它不是跨站点页面并且属于您自己的域,该模块就可以正常运行。

Document doc; // iframe document content
final String url_base = GWT.getHostPageBaseURL();
final Frame frame = new Frame(url_base + url_embedded); // your IFrame
frame.addLoadHandler(new LoadHandler() {

    @Override
    public void onLoad(LoadEvent event) {
        doc = IFrameElement.as(frame.getElement()).getContentDocument();

        wrapIFrameContent(); // If you need to wrap any widgets
    }
});
frame.setStyleName("css_style_name");
RootPanel.get("content").add(frame);

基本上就是这样。

您也可以嵌入多个页面。

这只是Window.Location.assign(url)

的替代方案

从IFrame页面中包装小部件,如下所示:

Button add_module = Button.wrap(doc.getElementById("addmodule")); // button

Element delem = doc.getElementById(id_events_div); // DIV element
events_div = DivElement.as(delem);

events_list = ListBox.wrap(doc.getElementById(id_event_list)); // ListBox