2
我想添加一個Java小程序到GWT頁面並調用一些小程序的方法。這是在JavaScript可能這樣做:GWT JSNI調用小程序方法
document.applet_id.someAppletMethod("value");
然而,當我嘗試使用JSNI原生功能GWT它未能實現同樣的想法。基本上它找不到小程序對象。這裏的JSNI代碼:
public native void callStringMethod(String methodName, String arg) /*-{
var temp = "document." + [email protected]_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:我知道「文檔」是不是從JSNI使用一個有效的名稱,使用$ DOC代替(explanation)。我不太清楚如何在eval()語句中編碼,以便編譯器用適當的引用替換$ doc,並且生成的javascript包含用戶指定的方法名稱和參數。正如你可能知道這是不可能的,只是混合輸入的Java變量和Javascript(explanation)
注2:下面的JavaScript從web瀏覽器地址欄
javascript:document.applet_id.someAppletMethod("asdf")
運行,這樣的小應用程序有沒有在頁面上,在文檔對象下,我可以從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());
}
感謝您的任何幫助,讓這項工作。
我見過的其他問題,但我不使用