2

私はこのサイトや他のサイトのコーディングと検索にかなり長い時間を費やしましたが、成功しませんでした。JSNIを呼び出すGWTアプリがあり、アプレットを呼び出してファイルの読み込みを実行します。そのため、ファイルの読み込みが完了したときにコールバックする必要があります。できる限り試してみてください。JavaScript(またはJava)コールバックを呼び出せません。通常、$wnd変数は次のように参照します。

$wnd.myFunc()

これ(または私がうまくいくと思った他のたくさんのバリエーション)を試してみると、静かに失敗します。私は次のような単純なものを呼び出すことさえできません:

$wnd.alert("Made it")

使ってみましたwindow.eval("$wnd.myFunc()");

私もwindow.call同じ結果で試しました。

私は間違ったコンテキストにいると推測しています(GWTはすべてをIFrameに配置します)が、GWTが"$wnd"変数を配置することになっているグローバルコンテキストにアクセスするためのオプションが見つかりません。

IFrameはセキュリティ上の理由から多少制約されていると思われますが、意図的に無効にされているものに遭遇したのではないかと思います。

とにかく、私の側では多くの当て推量がありますが、JavaScriptの知識は限られているので、おそらく私は単純なものを見落としています。

4

2 に答える 2

2

あなたのGWTコード

String value = JsniMethods.decryptData(data, publickey);

JsniMethodsクラスで

public static native String decryptData(String text, String publickey) /*-{
        var encrypted = $doc.appletname.methodname(text, publickey);
        return encrypted;
    }-*/;

HTMLでアプレットの初期化

<applet name="appletname" code="appletname.class"
        archive="appletname.jar" width="0" height="0" MAYSCRIPT="true"
        scriptable="true" > </applet>  

そして最後に

appletname.jar戦争フォルダにあなたを置きます..

幸運を

于 2013-01-24T13:27:12.973 に答える
1

私はついに自分の問題を解決しました。動作するメソッドの概要は次のとおりです。

アプレットの挿入コードは次のとおりです。

    String  appletDivHTML = "<div> <applet id=\"uploadApplet\" " +
            "code=\"<mypath>.ClientFileUpload\" " +
            "archive=\"applet.jar\" width=\"100\" height=\"100\" MAYSCRIPT> </applet>" +
            "<param name=\"MAYSCRIPT\" value=\"true\"/> </div>";
    com.google.gwt.user.client.Element  div = DOM.createDiv();
    div.setInnerHTML(appletDivHTML);
    BodyElement  body = Document.get().getBody();
    body.appendChild(div);

JavaのコールバックとJSNIは次のとおりです。

public static void fileCallback(String result) {
    Util.showMessage("Callback reached", "Result: " + result);
}

public static native void uploadFile(String serverURL, String filePath) /*-{
    $wnd.fileCallback = $entry(@<mypath>.Applet::fileCallback(Ljava/lang/String;));
    var  fileArray = [];
    fileArray.push(filePath);
    $wnd.uploadApplet.uploadFiles(serverURL, fileArray, "fileCallback");
}-*/;

Javaコールバックを呼び出すアプレットコード:

        JSObject window = JSObject.getWindow(this);
        String[] args = new String[] {responseString};
        window.call(callbackJsMethod, args);
于 2013-01-25T04:07:48.087 に答える