【问题标题】:Usage of ScriptInjector in GWTGWT 中 ScriptInjector 的使用
【发布时间】:2014-08-27 22:38:36
【问题描述】:

我想在 java 源代码中使用 javascript 库。我读了一些关于它的东西,我读到,我应该使用ScriptInjector。这个类有 2 个内部类:ScriptInjector.FromStringScriptInjector.FromUrl。我想从本地文件加载 javascript 库,所以我应该从字符串中使用。怎么做?

ScriptInjector.fromString("myLibrary.js");

不起作用。在哪里添加库?

【问题讨论】:

标签: java javascript gwt


【解决方案1】:

1) fromUrl - 创建带有指定 src 属性的script 标记并将其附加到页面。例如

ScriptInjector.fromUrl("http://example.com/my-script.js").inject();

只会产生:

<script type="text/javascript" src="http://example.com/my-script.js" />

您可以在网站上托管文件并按需注入每个文件

2) fromString - 使用指定的脚本 body 创建 script 标签,因此: ScriptInjector.fromString("alert('Injected!')").inject(); 会给

<script type="text/javascript">
alert('Injected!')
</script>

在这种情况下,JS 代码是您编译的 GWT 代码的一部分,浏览器不需要通过单独的请求加载它。我认为可以使用TextResource 将本机JS 文件包含到编译输出中。所以你需要以下内容:

定义资源

public interface JsResources extends ClientBundle {
final JsResources INSTANCE = GWT.create(JsResources.class);
@Source("first.js")
TextResource firstScript();
@Source("second.js")
TextResource secondScript();
}

注入所需的脚本

ScriptInjector.fromString(JsResources.INSTANCE.firstScript().getText()).inject();

【讨论】:

  • "我认为可以将原生 JS 文件包含到使用 TextResource 的编译输出中。"我可以确认:我只是设法按照您上面建议的方式重写了我自己的代码,并且它有效。
【解决方案2】:

要使用.fromString(),您必须将 JS 加载到字符串中并传递它。

如果您需要使用.fromUrl() 加载脚本,则必须将其放在“Internet”可访问的地方,因为inject() 最终会出现在

private static native void nativeSetSrc(JavaScriptObject element, String url) /*-{
  element.src = url;
}-*/;

(查看here

所以:提取或以其他方式将脚本公开给您的网络服务器。

干杯,

【讨论】:

  • 我写下了:ScriptInjector.fromUrl(file://myLibrary.js).inject();仍然没有注入库,因为无法访问该库中的元素。
  • 三个斜线(主机名可以在数字 2 和 3 之间)。路径(在第三个斜线之后)必须正确。记住用引号括起来。
  • 同样的问题。我在与加载此文件的类相同的包中有文件。
  • 我挖了一点,最后编辑了答案。
  • 所以文件只能使用 fromString() 方法加载? src 表示网站中的文件?
猜你喜欢
  • 2015-01-03
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
相关资源
最近更新 更多