假设我想在我的 GWT 应用程序中使用外部 JavaScript 库。我可以在我的模块 xml 文件中包含 myjslib.js:
<script src="myjslib.js"></script>
这就是问题所在:如果我的 GWT 应用程序不是全页应用程序,那么包含我的 GWT 应用程序的 html 页面可能已经加载了 myjslib.js 文件。
有没有办法告诉 GWT 如果页面上已经存在 myjslib.js ,则不应加载它?
假设我想在我的 GWT 应用程序中使用外部 JavaScript 库。我可以在我的模块 xml 文件中包含 myjslib.js:
<script src="myjslib.js"></script>
这就是问题所在:如果我的 GWT 应用程序不是全页应用程序,那么包含我的 GWT 应用程序的 html 页面可能已经加载了 myjslib.js 文件。
有没有办法告诉 GWT 如果页面上已经存在 myjslib.js ,则不应加载它?
无法使用该.gwt.xml
文件,但您可以在代码中访问文档的所有“<script>”标签并检查该src
属性是否与您的库名称匹配。然后,您可以使用帮助程序注入脚本ScriptInjector
。
NodeList<Element> scripts = Document.get().getElementsByTagName("script");
for (int i = 0; i < scripts.getLength(); i++) {
Element e = scripts.getItem(i);
if (e.getAttribute("src").matches(".*myjslib.js")) {
return;
}
}
ScriptInjector.fromUrl("myjslib.js").inject();
[编辑]
正如@ThomasBroyer 在他的第一条评论中所说,加载脚本的最简单方法是<script>
在页面头部添加一个标签。确保在 GWT 中使用脚本之前已加载脚本的最可靠方法是知道已在窗口对象中设置了某些属性。例如,如果您想加载 jquery.js,您可以测试是否定义了 $wnd.jQuery。
[编辑]
在您的 Javascript 库中包含以下内容:
window.myjslib = true;
在您的 Java 代码中:
public void OnModuleLoad() {
if (isMyJsLibLoaded() == false) {
ScriptInjector.fromUrl("myjslib.js").inject();
}
}
private native boolean isMyJsLibLoaded() /*-{
return !!$wnd.myjslib;
}-*/;