这里有一个使用客户端包和脚本注入器的示例,您可以使用同步加载或异步。
使用同步时,外部 js 内容将嵌入到应用程序中,否则它将包含在不同的片段中,该片段将通过 ajax 请求获得。
您可以将您的 api 放在任何服务器中并使用 ScriptInjector 加载它。
public class Example {
public static interface MyApiJs extends ClientBundle {
MyApiJs INSTANCE = GWT.create(MyApiJs.class);
@Source("my_api.js")
TextResource sync();
@Source("my_api.js") // Should be in the same domain or configure CORS
ExternalTextResource async();
}
public void loadSync() {
String js = MyApiJs.INSTANCE.sync().getText();
ScriptInjector.fromString(js).inject();
}
public void loadAsync() throws ResourceException {
MyApiJs.INSTANCE.async().getText(new ResourceCallback<TextResource>() {
public void onSuccess(TextResource r) {
String js = r.getText();
ScriptInjector.fromString(js).inject();
}
public void onError(ResourceException e) {
}
});
}
public void loadFromExternalUrl() {
ScriptInjector.fromUrl("http://.../my_api.js").inject();
}
}
[编辑]
更好的方法是使用gwtquery 1.4.0 中名为JsniBundle的新功能。我们在旧金山和法兰克福的GWT.create会议期间介绍了此功能。
使用这种方法,您可以将任何外部 javascript(放置在源代码树中或托管在外部主机中)作为 JSNI 块插入。它有很多好处:
- 利用 GWT jsni 验证器、混淆器和优化器。
- 当应用程序不使用它时,摆脱任何 jsni java 方法。
语法其实很简单:
public interface JQueryBundle extends JsniBundle {
@LibrarySource("http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js")
public void initJQuery();
}
JQueryBundle jQuery = GWT.create(JQueryBundle.class);
jQuery.initJQuery();