java - 如何从 Javascript 调用 GWT java 函数?

标签 java javascript gwt jsni

是否可以从 Javascript 调用 Java (GWT) 方法?文档中也不清楚。所有 sample 都在这里 http://code.google.com/intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html演示从 JSNI(非 JS)函数调用 java 函数。

更新 1

这是一段Java代码:

public class Test_GoogleWeb_JSNI_02 implements EntryPoint {
/**
 * This is the entry point method.
 */
public void onModuleLoad() {
}

public static void Callee() {
    Window.alert("Callee");
}
}

这是 html 格式的来电按钮示例:

<input type='button' value='Call' onclick='Test02()'>

下面是一些我试过但没有用的函数:

<script type="text/javascript">

    function Test01() {
        @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
    }

    function Test02() {
        com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()();
    }


</script>

更新 2

以下有效。

Java 准备:

public void onModuleLoad() {
    Prepare();
}

public static native void Prepare() /*-{
    $doc.calleeRunner = @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee();
}-*/;

public static void Callee() {
    Window.alert("Callee");
}

来电者:

function Test03() {
        document.calleeRunner();
}

有没有更好的办法?

最佳答案

您的示例无法运行,因为您正尝试在某些外部脚本中使用 JSNI。如果您想从外部 JS 调用某些内容,您需要使用此question 中描述的方法。或使用 GWT exporter

更新:

公开 GWT 内容的最安全方法是将调用包装在其他一些函数中。例如:

    public native void expose()/*-{
    $wnd.exposedMethod = function(param){
         @com.my.MyClass::myFunction(*)(param);
    }
}-*/;

否则你可能会在生产模式中遇到一些奇怪的错误=)

关于java - 如何从 Javascript 调用 GWT java 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8619245/

相关文章:

javascript - 为什么我无法在 JSFiddle 中执行这个简单的 JavaScript 测试程序?

Java:Apache POI:我可以从 MS Word (.doc) 文件中获取干净的文本吗?

java - java中的虚方法调用-多态性

javascript - Angular 7 将动态组件注入(inject)模板

java - gxt 将图像与组合框对齐

gwt - 在哪里可以找到由 GWT 延迟绑定(bind)创建的 java 类文件?

java - GWT JSNI : invoking applet methods?

java - Spring Scheduler同步方法饥饿

Java网络文件传输问题

JavaScript 枚举示例 - 这是如何工作的?