[英]integrate GWT with $(document).ready
我的目标是使用JSNI在java中调用一个方法,并使用handwirtten javascript代码进行调用,也就是说:我将在$(document).ready
中有一个函数,它将在java中调用一个方法。
我的问题是我不知道将首先加载哪个脚本:GWT脚本或我的手写javascript脚本,因此我想知道是否有一个解决方案来集成$(document).ready
在GWT之后加载已加载,因为如果首先加载GWT,javascrpit对象窗口尚未知道JSNI方法,并且抛出错误。
一种好方法是在导出所有必需的JSNI后加载自定义JavaScript
文件。
尝试任何一个
导出所有JSNI
方法后,您可以使用JSNI
下面的页面添加自定义JavaScript
。
public static native void loadCustomJS() /*-{
var js = $doc.createElement("script");
js.type = "text/javascript";
js.src = jsFilePath;
$doc.body.appendChild(js);
}-*/;
在HTML / JSP中创建一个JavaScript
函数,并在导出所有JSNI后从Entry Point类调用它。
HTML / JSP
...
<script type="text/javascript">
function loadCustomJS(){
// load your custom JavaScript here
}
</script>
...
入口点类:
public static native void loadCustomJS()
/*-{
$wnd.loadCustomJS();
}-*/;
如果您想使用纯GWT解决方案,您可以利用GWT的ScriptInjector :
ScriptInjector.fromUrl("http://example.com/foo.js").setCallback(
new Callback() {
public void onFailure(Exception reason) {
Window.alert("Script load failed.");
}
public void onSuccess(Void result) {
Window.alert("Script load success.");
}
}).inject();
因此,在gwt的onModuleLoad()
方法中,您可以放置此代码段。 这样你就不需要编写一行额外的JS了。
有一种简单的方法可以确保您的脚本在其他所有内容之后运行:将它放入<script>
元素中,您将其添加为<body>
元素中的最后一个元素:
<html><head>...</head>
<body>...
<script>/* your code here */</script>
</body>
浏览器必须保证script
元素的执行顺序:它们按照它们在DOM中出现的顺序执行(对于远程脚本也是如此;在这种情况下,浏览器可以在后台下载代码但是在下载完成之前它不会触及下一个<script>
元素。
请注意,如果使用此“技巧”,则不需要使用$(document).ready()
:由于您的script
元素是DOM中的最后一个元素,因此根据定义,DOM必须“准备好”它被处理了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.