2010-11-20 73 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

相关问题