创建后,ScriptElement
您必须将其注入DOM
以加载第 3 方脚本,但这不是在 GWT 中加载脚本的正常方式。
通常在 GWT 中,我们使用ScriptInjector
,但在您的情况下,您必须使用以前的一些JSNI
代码在 window 对象中设置这些变量:
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;
}-*/;
您甚至可以将您的 javascript 代码作为字符串注入ScriptInjector
,但 IMO 这是一个讨厌的解决方案,因为 GWT 编译器无法执行任何 JSNI 语法检查:
....
ScriptInjector.fromString(
"$wnd.addthis_config = $wnd.addthis_config||{};" +
"$wnd.addthis_config.pubid = '+ " AT_PUBID + "';"
).inject();
ScriptInjector.fromUrl(AT_URL).inject();
如果你真的不想使用JSNI
来避免处理 javascript 错误,我建议使用gwtquery库,除了许多功能外,它还允许你使用非常简单的语法来操作 DOM 元素:
import static com.google.gwt.query.client.GQuery.*;
....
$(window).prop("addthis_config", $$("pubid: " + AT_PUBID));
ScriptInjector.fromUrl(AT_URL).inject();