繁体   English   中英

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

[英]How skip loading external JavaScript library from being loaded when included in gwt.xml?

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

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

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

有没有办法telll 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();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM