Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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
从html脚本标记调用GWT Java函数_Java_Javascript_Gwt_Jsni - Fatal编程技术网

从html脚本标记调用GWT Java函数

从html脚本标记调用GWT Java函数,java,javascript,gwt,jsni,Java,Javascript,Gwt,Jsni,我有一个GWT项目,我想在GWT项目的主html文件中添加一个脚本标记,该文件调用位于我的客户机代码中的Java函数 根据示例,我应该添加类似以下html标记的内容: <script type='text/javascript'> this.@com.myCompany.myProject.client.myClass::myFunction(); </script> 也就是说,没有调用myFunction 但是,当我从JSNI方法发出相同的调用时,它就工作了 可能无

我有一个GWT项目,我想在GWT项目的主html文件中添加一个脚本标记,该文件调用位于我的客户机代码中的Java函数

根据示例,我应该添加类似以下html标记的内容:

<script type='text/javascript'> 
this.@com.myCompany.myProject.client.myClass::myFunction();
</script>
也就是说,没有调用myFunction

但是,当我从JSNI方法发出相同的调用时,它就工作了

可能无法从html脚本执行调用,还是我做错了什么

谢谢

  • 您正在尝试的操作不起作用,因为GWT编译器重命名所有标识符名称以最小化生成的代码大小:因此
    myFunction()
    存在,但它被称为其他名称

  • 您正在查看旧版本的文档。在最新版本中,这一点已全部说明:

  • 解决方案-在某处添加其他方法:

    public static native void exportMyFunction() /*-{
       $wnd.myFunction =
          $entry(@com.myCompany.myProject.client.myClass::myFunction());
    }-*/;
    
    然后在应用程序初始化中,必须调用
    EnclosingClass.exportMyFunction()
    。然后,在手工制作的javascript中,您可以通过以下方式访问它:

    window.myFunction();
    

    我试图解决一个类似的问题,只是一个问题,如何将字符串传递给myFunction()?类似于myFunction(字符串s)?查看此文档以了解如何为JSNI调用添加参数:在这个答案中还有完整的示例:如果myFunction()是一个实例方法而不是静态的,这是如何工作的?JavaScript如何知道调用哪个myFunction()实例?没有。我很想知道这是否解决了问题,因为我也遇到了同样的情况,因此它抛出了一个异常。我不认为您可以从手写JavaScript调用非静态GWT Java方法,因为在导出本机函数的应用程序初始化过程中,您还没有EnclosingClass的实例,并且存在鸡和蛋的问题。@axle123都在文档中:
    window.myFunction();