处理这种情况的最佳方法是什么?
详细说明:
我有一个名为'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?
可以创建自定义链接器帮助吗?
答案 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