将Javascript代码插入ScriptElement以设置窗口变量

将Javascript代码插入ScriptElement以设置窗口变量,java,javascript,gwt,Java,Javascript,Gwt,在GWT中,如何将此Javascript转换为ScriptElement: <script type="text/javascript"> var addthis_config = addthis_config||{}; addthis_config.pubid = 'YOUR-PUBID'; $.getScript( "https://s7.addthis.com/js/300/addthis_widget.js#domready=1"); </script> 但是,

在GWT中,如何将此Javascript转换为ScriptElement:

<script type="text/javascript">
var addthis_config = addthis_config||{};
addthis_config.pubid = 'YOUR-PUBID';
$.getScript( "https://s7.addthis.com/js/300/addthis_widget.js#domready=1");
</script>

但是,如何使用
addthis\u config
addthis\u config.pubid

在创建
ScriptElement
之后,您必须将其注入
DOM
以加载第三方脚本,但这不是在GWT中加载脚本的正常方式

通常在GWT中,我们使用
ScriptInjector
,但在您的情况下,您必须使用以前的一些
JSNI
代码来设置窗口对象中的变量:

final static String AT_PUBID = "YOUR-PUBID";
final static String AT_URL = "https://s7.addthis.com/js/300/addthis_widget.js#domready=1";

public void onModuleLoad() {
  setAddthisId(AT_PUBID);
  ScriptInjector.fromUrl(AT_URL).inject();
}

private static native void setAddthisId(String id) /*-{
  $wnd.addthis_config = $wnd.addthis_config||{};
  $wnd.addthis_config.pubid = id;
}-*/;
您甚至可以使用
ScriptInjector
将javascript代码作为字符串注入,但这是一个糟糕的解决方案,因为GWT编译器无法执行任何JSNI语法检查:

....
ScriptInjector.fromString(
   "$wnd.addthis_config = $wnd.addthis_config||{};" +
   "$wnd.addthis_config.pubid = '+ " AT_PUBID + "';"
).inject();
ScriptInjector.fromUrl(AT_URL).inject();
如果您实际上不想使用
JSNI
,以避免处理javascript错误,我建议您使用该库,它除了具有许多功能外,还允许您使用非常简单的语法操作DOM元素:

import static com.google.gwt.query.client.GQuery.*;
....

$(window).prop("addthis_config", $$("pubid: " + AT_PUBID));
ScriptInjector.fromUrl(AT_URL).inject();

我正在试图找出如何使用$(window)设置多个变量,比如
window.var1='a',window.var2='b'
?是的,和GQuery完全一样:
$(window.prop(“var1”,“a”)
$(窗口).prop(“var2”,“b”)
import static com.google.gwt.query.client.GQuery.*;
....

$(window).prop("addthis_config", $$("pubid: " + AT_PUBID));
ScriptInjector.fromUrl(AT_URL).inject();