2010-11-20 49 views

回答

6

在GWT 2.4添加ScriptInjector http://gwt-code-reviews.appspot.com/1451818/

ScriptInjector.fromUrl("http://example.com/foo.js").setCallback(
    new Callback<Void, Exception>() { 
     public void onFailure(Exception reason) { 
      Window.alert("Script load failed."); 
     } 
     public void onSuccess(Void result) { 
      Window.alert("Script load success."); 
     } 
    }).inject(); 
+0

哇,看起來它是1.6以來的很長一段時間:D – 2011-07-15 15:37:30

2

如果許可證允許您這樣做,那麼您可以將庫的整個JS代碼複製並粘貼到JSNI方法中。

你也可以使用一個TextResource這樣的:

public static interface Resources extends ClientBundle { 
    @Source("some.js") 
    TextResource someJs(); 
} 

public void onModuleLoad() { 
    final Resources resources = GWT.create(Resources.class); 
    eval(resources.someJs().getText()); 
} 

private static native void eval(String s) /*-{ 
    eval(s); 
}-*/; 

的「some.js」文本將被直接扣留到最終的應用程序。不會有任何單獨的下載。

+0

是的,我可以,但我真的很想c精簡。我可能會在生成過程中將文件作爲依賴項移入。 – 2010-11-20 17:45:48

+0

@Sudhir:我完全明白這一點。但是,gwtc只是一個Java to JavaScript編譯器/轉換器,它可以另外包含JSNI提供的JavaScript。所以我沒有看到一個直接的方法。也許你可以像這樣構造一個間接的解決方案:將JS代碼作爲TextResource(ClientBundle),然後評估JSNI中的文本。還沒有嘗試過呢! – 2010-11-20 18:04:20

+0

現在,它可以將js文件標記爲腳本資源,並確保它在模塊運行之前下載。我試圖看看是否有人知道我可以告訴GWT將這個文件放入模塊本身的方式。它仍然會執行完全相同的操作,請求數量更少。 – 2010-11-20 18:15:59

0

gwt-maps-utility project對您有用嗎?

+0

不,我在v3上,沒有人似乎有v3的實用程序GWT端口:( – 2010-11-20 17:44:15

8

你可以定義一個ClientBundle爲您的JavaScript資源這樣的:

public interface JsResources extends ClientBundle { 
    final JsResources INSTANCE = GWT.create(JsResources.class); 

    @Source("myAwesomeJavaScript.js") 
    TextResource myAwesomeJavaScript(); 
} 

並將其包含在您的應用程序與ScriptInjector:

ScriptInjector 
    .fromString(JsResources.INSTANCE.myAwesomeJavaScript().getText()) 
    .inject(); 
+3

imo這是最好的解決方案,將js捆綁到一個文本資源將減少額外的http請求來加載js。 – 2014-05-12 07:14:15

相關問題