如何在可重用的gwt库/小部件中包含第三方JavaScript库?

如何在可重用的gwt库/小部件中包含第三方JavaScript库?,gwt,pubnub,Gwt,Pubnub,我正试着用GWT把脚弄湿,看看迁移是否可行。我通常先尝试较难的部分,以确保我能完成项目。我的项目中最困难的部分是引用第三方JS LIB。在这个例子中,我尝试使用PubNub,因为我们的很多平台都使用它 我想做的是创建一个可重用的对象,该对象可以用于其他需要PubNub的GWT项目。我已经成功地运行了一个简单的小测试(即,我已经掌握了JNSI的基本知识),但我的问题是->为了正确创建库/模块,我应该将对第三方脚本的引用放在哪里 现在我只是在项目的HTML页面中引用了外部脚本,但从可重用性的角度来看

我正试着用GWT把脚弄湿,看看迁移是否可行。我通常先尝试较难的部分,以确保我能完成项目。我的项目中最困难的部分是引用第三方JS LIB。在这个例子中,我尝试使用PubNub,因为我们的很多平台都使用它

我想做的是创建一个可重用的对象,该对象可以用于其他需要PubNub的GWT项目。我已经成功地运行了一个简单的小测试(即,我已经掌握了JNSI的基本知识),但我的问题是->为了正确创建库/模块,我应该将对第三方脚本的引用放在哪里

现在我只是在项目的HTML页面中引用了外部脚本,但从可重用性的角度来看,我确信这是不正确的,因为这个库将用于其他项目,每个项目都有自己的基本HTML页面

我尝试将引用放在gwt.xml文件中,但这似乎丢失了引用(即我的测试项目不再像脚本在HTML页面中时那样工作)


关于如何在可重用的GWT库/小部件中包含第三方库,您有什么建议吗?

这里有一个使用客户端包和脚本注入器的示例,您可以使用同步加载或异步加载

当使用sync时,外部js内容将嵌入到应用程序中,否则它将包含在不同的片段中,该片段将通过ajax请求获得

您可以将api放在任何服务器上,并使用ScriptInjector加载它

公共类示例{
公共静态接口MyApiJs扩展了ClientBundle{
MyApiJs实例=GWT.create(MyApiJs.class);
@来源(“my_api.js”)
TextResource同步();
@Source(“my_api.js”)//应位于同一域中或配置CORS
ExternalTextResource异步();
}
公共void loadSync(){
字符串js=MyApiJs.INSTANCE.sync().getText();
ScriptInjector.fromString(js.injector();
}
public void loadAsync()引发ResourceException{
MyApiJs.INSTANCE.async().getText(新的ResourceCallback()){
成功时公共无效(textr资源){
字符串js=r.getText();
ScriptInjector.fromString(js.injector();
}
公共无效onError(资源例外e){
}
});
}
public void loadFromExternalUrl(){
ScriptInjector.fromUrl(“http://.../my_api.js)注入();
}
} 
[已编辑]

更好的方法是使用1.4.0中名为。我们在旧金山和法兰克福的会议上介绍了这个特性。 使用这种方法,您可以将任何外部javascript(放置在源代码树中或托管在外部主机中)作为JSNI块插入。它有很多好处:

  • 利用GWT jsni验证器、模糊器和优化器
  • 当应用程序不使用任何JSNIJava方法时,请将其删除
语法实际上很简单:

公共接口JQueryBundle扩展了JsniBundle{
@图书馆资源(“http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js")
public void initJQuery();
} 
JQueryBundle jQuery=GWT.create(JQueryBundle.class);
initJQuery();

请看这个问题:谢谢Jean。我可以得到一个关于如何完成这项工作的示例片段吗。我遵循了帖子中给出的内容,但似乎不起作用。类似的方法是:查看gwtquery中的新JsniBundle,编辑我的回复。