当包含在gwt.xml中时,如何避免加载外部JavaScript库?

当包含在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文件,但您可以在代码中这样做,访问

假设我想在GWT应用程序中使用外部JavaScript库。我可以在模块xml文件中包含myjslib.js,包括:

 <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;
  }-*/;