首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GWT JSNI调用applet方法

GWT JSNI调用applet方法
EN

Stack Overflow用户
提问于 2011-09-22 03:01:49
回答 1查看 1.5K关注 0票数 2

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

代码语言:javascript
复制
document.applet_id.someAppletMethod("value");

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

代码语言:javascript
复制
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
}-*/;

Note1:我知道"document“不是可以在JSNI中使用的有效名称,您应该改用$doc (explanation)。我不太知道如何在eval()语句中对此进行编码,因此编译器用适当的引用替换了$doc,并且生成的javascript还包含用户指定的方法名称和参数。正如您可能知道的,不可能只混合输入Java变量和Javascript (explanation)

Note2:以下JavaScript从web浏览器地址栏运行

代码语言:javascript
复制
javascript:document.applet_id.someAppletMethod("asdf")

小程序就在页面上的document object下,我可以从Javascript访问它。它在JSNI上并不能很好地工作。

Note3:我通过继承GWT的HTML类将实际的applet标记添加到面板中。大致如下:

代码语言:javascript
复制
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());
}

感谢您的任何帮助,让这个工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-22 05:43:34

  1. 尝试将mayscript="mayscript"添加到<applet>标记。
  2. 可能很幼稚-在将小程序添加到页面后是否调用了callStringMethod()
  3. 至少还有两个其他类似的问题:<代码>C9和
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7505199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档