【问题标题】:How to add a GWT module to a dynamically created Iframe如何将 GWT 模块添加到动态创建的 Iframe
【发布时间】:2017-06-01 17:17:33
【问题描述】:

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

  • 代码方面,我想拥有 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 文件的单独下载。

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

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

【问题讨论】:

    标签: javascript iframe gwt


    【解决方案1】:

    类似的东西。如果您的页面上已经有一个 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
    

    【讨论】:

    • 这对于在 iframe 中加载单个模块很有用。目前我在一个 JS 文件中有 2 个 GWT 模块。有没有办法可以将其中一个加载到 iframe 中?
    • 如果模块本身运行良好,那么它应该在准备好时加载必要的js源。
    • 我想在 iframe 中运行不同的模块,这是一个不同的范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多