2

Java アプレットを GWT ページに追加し、アプレットのメソッドのいくつかを呼び出したいと考えています。これは、次のようにして JavaScript で可能です。

document.applet_id.someAppletMethod("value");

ただし、GWT で JSNI ネイティブ関数を使用して同じアイデアを実装しようとすると失敗します。基本的に、アプレット オブジェクトを見つけることができません。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: 「ドキュメント」は JSNI から使用できる有効な名前ではないことはわかっています。代わりに $doc を使用します (説明)。これを eval() ステートメントでエンコードする方法がよくわからないため、コンパイラは $doc を適切な参照に置き換えます。また、生成された JavaScript には、ユーザーが指定したメソッド名と引数が含まれます。お気づきかもしれませんが、入力 Java 変数と Javascript を混在させることはできません (説明) 。

注 2: 次の JavaScript は、Web ブラウザーのアドレス バーから実行されます。

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

したがって、アプレットはページのドキュメント オブジェクトの下にあり、Javascript からアクセスできます。JSNIからはうまく機能していません。

注 3: 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());
}

これを機能させるための助けをありがとう。

4

1 に答える 1

3
  1. タグに追加mayscript="mayscript"してみてください。<applet>
  2. たぶんナイーブ-callStringMethod()アプレットがページに追加された後に呼び出されますか?
  3. このような他の2つの少なくとも2つの質問があります:GWT JSNI:アプレットメソッドの呼び出し?JSNIからのJavaメソッドの呼び出しに関するGWTの問題
于 2011-09-21T21:43:34.450 に答える