GWT JSNI调用applet方法

时间:2011-09-21 19:01:49

标签: java javascript gwt applet jsni

我想将一个Java applet添加到GWT页面并调用一些applet的方法。这可以在javascript中执行:

document.applet_id.someAppletMethod("value");

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

public native void callStringMethod(String methodName, String arg) /*-{
    var temp = "document." + this.@com.my_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从Web浏览器地址栏

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

所以applet就在页面上,在文档对象下,我可以从Javascript访问它。它只是从JSNI开始工作。

注3:我通过继承GWT的HTML类将实际的applet标签添加到面板中。沿着:

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 个答案:

答案 0 :(得分:3)

  1. 尝试将mayscript="mayscript"添加到<applet>代码。
  2. 也许天真 - 在将applet添加到页面后调用callStringMethod()
  3. 还有其他2个问题至少还有2个:GWT JSNI: invoking applet methods?GWT problem with calling Java methods from JSNI