繁体   English   中英

将GWT与$(document).ready集成

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM