Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java脚本调用gwt函数_Java_Javascript_Gwt - Fatal编程技术网

用java脚本调用gwt函数

用java脚本调用gwt函数,java,javascript,gwt,Java,Javascript,Gwt,对不起,我知道以前有人问过这个问题,但我没法让它运行。谁能告诉我,为什么我的代码不起作用 我尝试的是:我想用html页面中的java脚本调用gwt函数。gwt函数创建一个int,返回它,javascript应该在html页面中解析它 我的java代码是: package com.test.client; import com.google.gwt.core.client.EntryPoint; public class TestCode implements EntryPoint { p

对不起,我知道以前有人问过这个问题,但我没法让它运行。谁能告诉我,为什么我的代码不起作用

我尝试的是:我想用html页面中的java脚本调用gwt函数。gwt函数创建一个int,返回它,javascript应该在html页面中解析它

我的java代码是:

package com.test.client;

import com.google.gwt.core.client.EntryPoint;

public class TestCode implements EntryPoint {
  public static native void exportTestReturn()/*-{
    $wnd.testReturn = $entry(@com.test.client.TestCode::testReturn());
  }-*/;

  public static int testReturn(){
    int testVar = 3;
    return testVar;
  }

  public void onModuleLoad() {
    exportTestReturn();
  }
}
和我的html代码:

<!doctype html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>TestTitle</title>
    <script type="text/javascript" language="javascript" src="com.test.TestCode/com.test.TestCode.nocache.js">
    </script>
  </head>

  <body>
    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>

    <p>Gwt html file tries to start gwt function and parse the return value</p>
    <script>
      document.write("JS output:" + testReturn() + "<br>");
    </script>
  </body>
</html>

测试标题
Gwt html文件尝试启动Gwt函数并解析返回值

编写(“JS输出:“+testReturn()+”
”);
您似乎是在GWT
onModuleload
导出函数之前调用该函数的

GWT使用一个引导脚本(your_app.nocache.js),该脚本计算排列,然后异步加载应用程序脚本(xxxx.cache.js)

如果从浏览的javascript控制台调用函数,您可以看到它是有效的

将javascript代码配置为等待GWT代码完全加载,或者将其放入函数块并从JSNI方法调用

public static native void exportTestReturn()/*-{
  $wnd.testReturn = $entry(@com.test.client.TestCode::testReturn());
  $wnd.onLoad();
}-*/;


<script>
  function onLoad() {
    document.write("JS output:" + testReturn() + "<br>");
  }
</script>
public静态本机void exportTestReturn()/*-{
$wnd.testReturn=$entry(@com.test.client.TestCode::testReturn());
$wnd.onLoad();
}-*/;
函数onLoad(){
编写(“JS输出:“+testReturn()+”
”); }
如果您希望等待gwt加载完成,请在循环中输入,直到gwt加载时在window对象中设置的任何var存在,但这是一个非常棘手的解决方案:

<script>
 (function loopWaitGwtReady() {          
  setTimeout(function () {
    if (window.__gwt_activeModules)
       document.write("JS output:" + testReturn() + "<br>");
    else
       loopWaitGwtReady()
  }, 50)
 })();    
</script>

(函数loopWaitGwtReady(){
setTimeout(函数(){
if(窗口\ gwt\活动模块)
编写(“JS输出:“+testReturn()+”
”); 其他的 loopwaitgwtreedy() }, 50) })();
谢谢你的快速回答,但这对我不起作用。如果我添加
$wnd.onLoad()
并将文档行放入您告诉我的函数中,我得到以下错误:
[error][com.test.TestCode]无法加载模块入口点类com.test.client.TestCode(有关详细信息,请参阅关联的异常)com.google.gwt.core.client.JavaScriptException:(TypeError)@com.test.client.TestCode::exportTestReturn()([]):$wnd.onLoad不是一个函数
答案中有一个小错误-它应该是
function onLoad(){
,而不是
onLoad()){
。进行此更改将正确声明函数,以便可以从GWT代码中调用它。谢谢,这是有效的:-)其他解决方案将如何实现?如何使我的javascript代码等待GWT代码完全加载?编辑我的响应,并使用一个循环等待GWT可用。对不起,我没有时间进行测试所以你确定你的第二个例子是正确的吗?为什么整个函数都在括号()中?