当包含在gwt.xml中时,如何避免加载外部JavaScript库?
假设我想在GWT应用程序中使用外部JavaScript库。我可以在模块xml文件中包含myjslib.js,包括:当包含在gwt.xml中时,如何避免加载外部JavaScript库?,java,javascript,gwt,Java,Javascript,Gwt,假设我想在GWT应用程序中使用外部JavaScript库。我可以在模块xml文件中包含myjslib.js,包括: <script src="myjslib.js"></script> 问题是:如果my GWT应用程序不是一个完整的页面应用程序,那么包含my GWT应用程序的html页面可能已经加载了myjslib.js文件 有没有办法告诉GWT,如果页面上已经存在myjslib.js,就不应该加载它?没有办法使用.GWT.xml文件,但您可以在代码中这样做,访问
<script src="myjslib.js"></script>
问题是:如果my GWT应用程序不是一个完整的页面应用程序,那么包含my GWT应用程序的html页面可能已经加载了myjslib.js文件
有没有办法告诉GWT,如果页面上已经存在myjslib.js,就不应该加载它?没有办法使用
.GWT.xml
文件,但您可以在代码中这样做,访问文档的所有“”标记并检查src
属性是否与库名匹配。然后,您可以使用ScriptInjector
helper注入脚本
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();
在Java代码中:
public void OnModuleLoad() {
if (isMyJsLibLoaded() == false) {
ScriptInjector.fromUrl("myjslib.js").inject();
}
}
private native boolean isMyJsLibLoaded() /*-{
return !!$wnd.myjslib;
}-*/;
我宁愿检查页面中是否存在从
myjslib.js
创建的某个全局对象或方法,否则就是这样。或者更确切地说,方法是让模块的用户在页面中加载myjslib.js
,而不要麻烦从应用程序本身加载它(通过gwt.xml
或ScriptInjector
)@ThomasBroyer 100%同意。@ThomasBroyer你说的什么“或者更确切地说,方法是让模块的用户在页面中加载myjslib.js,而不是麻烦从应用程序本身加载它(通过gwt.xml或ScriptInjector)“你能举个例子吗?在HTML页面中有一个
,在GWT中没有什么特别的,只是假设库已经加载。@ThomasBroyer在GWT尝试使用它之前,你怎么能确定库已经加载了呢?”?
public void OnModuleLoad() {
if (isMyJsLibLoaded() == false) {
ScriptInjector.fromUrl("myjslib.js").inject();
}
}
private native boolean isMyJsLibLoaded() /*-{
return !!$wnd.myjslib;
}-*/;