在GWT中使用ScriptInjector

时间:2014-07-07 12:33:07

标签: java javascript gwt

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

ScriptInjector.fromString("myLibrary.js");

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

2 个答案:

答案 0 :(得分:5)

1)fromUrl - 使用指定的 src 属性创建script标记,并将其附加到页面。 E.g。

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

只会产生:

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

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

2)fromString - 使用脚本的指定正文创建script代码,因此: ScriptInjector.fromString(&#34;警报(&#39;注射&#39;!)&#34;)。注(); 会给出

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

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

定义资源

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();

答案 1 :(得分:1)

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

如果您需要使用.fromUrl()加载脚本,则必须将其置于某个地方&#34; Internet&#34;可访问,因为inject()最终在

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

(见here

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

干杯,