我想将一个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
}-*/;Note1:我知道"document“不是可以在JSNI中使用的有效名称,您应该改用$doc (explanation)。我不太知道如何在eval()语句中对此进行编码,因此编译器用适当的引用替换了$doc,并且生成的javascript还包含用户指定的方法名称和参数。正如您可能知道的,不可能只混合输入Java变量和Javascript (explanation)
Note2:以下JavaScript从web浏览器地址栏运行
javascript:document.applet_id.someAppletMethod("asdf")小程序就在页面上的document object下,我可以从Javascript访问它。它在JSNI上并不能很好地工作。
Note3:我通过继承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());
}感谢您的任何帮助,让这个工作。
发布于 2011-09-22 05:43:34
mayscript="mayscript"添加到<applet>标记。callStringMethod()?https://stackoverflow.com/questions/7505199
复制相似问题