簡體   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