java - GWT JSNI调用小程序方法

标签 java javascript gwt applet jsni

我想将 Java 小程序添加到 GWT 页面并调用该小程序的一些方法。在 javascript 中可以通过执行以下操作来实现:

document.applet_id.someAppletMethod("value");

但是,当我尝试在 GWT 中使用 JSNI native 函数实现相同的想法时,它失败了。基本上它找不到applet对象。这是 JSNI 代码:

public native void callStringMethod(String methodName, String arg) /*-{
    var temp = "document." + <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1c6874756f325c7f7371327165" rel="noreferrer noopener nofollow">[email protected]</a>_project.AppletWrapper::appletName + "." + methodName + "(\"" + arg + "\");";             
    eval(temp);                                     //<----- FAIL

    //SOME TEST CODE
    $doc.applet_id.someAppletMethod("test value")   //<----- FAIL as well
    alert(typeof $doc.applet_id);                   //Undefined
    alert(typeof document.applet_id);               //Undefined
    alert(typeof $wnd.applet_id);                   //Undefined
}-*/;

注1:我知道“document”不是 JSNI 使用的有效名称,您可以使用 $doc 代替( explanation )。我不太知道如何在 eval() 语句中对其进行编码,因此编译器将 $doc 替换为正确的引用,并且生成的 javascript 包含用户指定的方法名称和参数。您可能知道,不可能混合输入 Java 变量和 Javascript ( explanation )

注2:以下 JavaScript 从网络浏览器地址栏运行

javascript:document.applet_id.someAppletMethod("asdf")

所以小程序位于页面上的文档对象下,我可以从 Javascript 访问它。它只是在 JSNI 中不太起作用。

Note3:我通过子类化 GWT 的 HTML 类来将实际的小程序标记添加到面板中。大致如下:

public AppletWrapper(String appletName, String jarName, String className) {
    StringBuilder applet = new StringBuilder();
    applet.append("<applet archive=\"").append(jarName).append("\" ");
    applet.append("code=\"").append(className).append("\" ");
    applet.append("name=\"").append(appletName).append("\" ");
    applet.append("id=\"").append(appletName).append("\" ");
    applet.append("width=\"100%\" height=\"450\">");
    applet.append("Browser doesn't support Java");
    applet.append("</applet>");
    this.setHTML(applet.toString());
}

感谢您为实现此功能提供的任何帮助。

最佳答案

  1. 尝试添加 mayscript="mayscript"<applet>标签。
  2. 也许天真 - 是 callStringMethod()小程序添加到页面后调用?
  3. 还有另外 2 个至少 2 个类似的问题:GWT JSNI: invoking applet methods?GWT problem with calling Java methods from JSNI

关于java - GWT JSNI调用小程序方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505199/

相关文章:

java - Java 中的临时线程限制示例

java - 如何在java中使用Option类(cli-commons)

javascript - CSS使用F12开发者工具在chrome中显示一个元素的内容

javascript - JS链接不起作用

javascript - Paper.js Mouseup 事件被工具抑制

java - GAE/J : how do I get a User object from the user-id? 替代 : how come I can't set the nickname on a User object?

java - 循环单链表

java - 具体的Java代码到C#

java - GWT @UiHandler 不起作用

gwt - 如何在gwt中获得一年中的一周