gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:18:21 26 4
gpt4 key购买 nike

我正在尝试尝试 GWT,看看迁移是否能成功。我通常会先尝试更困难的部分,以确保我能够完成项目。我的项目中最困难的部分是引用第 3 方 JS 库。在此示例中,我尝试使用 PubNub,因为我们的大部分平台都使用它。

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

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

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

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

最佳答案

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

当使用sync时,外部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期间引入了此功能。在旧金山和法兰克福举行的 session 。

通过这种方法,您可以插入任何外部 javascript(放置在源代码树中或托管在外部主机中)作为 JSNI block 。它有很多好处:

  • 利用 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();

关于gwt - 如何将第 3 方 JavaScript 库包含在可重用的 gwt 库/小部件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12812164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com