当包含在gwt.xml中时如何跳过加载外部JavaScript库?

时间:2013-10-18 01:02:06

标签: java javascript gwt

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

 <script src="myjslib.js"></script>

问题在于:如果我的GWT应用程序不是整页应用程序,那么包含我的GWT应用程序的html页面可能已经加载了myjslib.js文件。

有没有办法telll GWT,如果页面上已经存在myjslib.js,则不应该加载它?

1 个答案:

答案 0 :(得分:3)

无法使用.gwt.xml文件,您可以在访问所有'&lt; script&gt;'的代码中执行此操作文档的标记,并检查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();

[EDITED]

正如@ThomasBroyer在他的第一条评论中所说,加载脚本的最简单方法是在页面的头部添加<script>标记。在GWT中使用脚本之前确保脚本已加载的最可靠方法是知道在窗口对象中设置了一些属性。例如,如果要加载jquery.js,可以测试是否定义了$ wnd.jQuery。

[EDITED]

在您的Javascript库中包含类似的内容:

  window.myjslib = true;

在您的Java代码中:

  public void OnModuleLoad() {
     if (isMyJsLibLoaded() == false) {
        ScriptInjector.fromUrl("myjslib.js").inject();
     }
  }

  private native boolean isMyJsLibLoaded() /*-{
     return !!$wnd.myjslib;
  }-*/;