这里有一个使用客户端软件包和脚本注入器的示例,可以使用同步加载或异步加载。
当使用同步时,外部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();
请看看这个问题:http://stackoverflow.com/questions/12746303/gwt-library-with-external-javascript-script –
感谢Jean。我可以得到一个关于如何完成这个任务的示例代码片段。我遵循了帖子中给出的内容,似乎并不奏效。 – user1733647
类似的方法:http://stackoverflow.com/a/8764304/921244 –