1

rhino を使用しようとしています。window.atob(param)Java コードから JavaScript 関数を使用したい。まず、それは可能ですか?これは私が試したものです。

ScriptEngine runtime = null;
try {
    runtime = new ScriptEngineManager().getEngineByName("javascript");
    runtime.put(
            "str",
            "PGh0bJvZHk+PC9odG1sPg==");
    System.out.println((String)runtime.eval("window.atob(str)"));

} catch (Exception ex) {
    ex.printStackTrace();
}

次の例外が発生しています。

sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "window" is not defined

Javaを使用してデコードできることは知っていますが、rhinoを使用してデコードする方法を教えてもらえますか?

4

3 に答える 3

1

window(およびdocument、ここでは) は、ブラウザー内の Web ページに関連付けられているオブジェクトです。これらの概念は Rhino には存在しないため、 のメソッドにはアクセスできませんwindow

ただし、サポートを追加するように github にリクエストがありatobます。それまでは、自分で実装するか、それを含むライブラリを見つける必要があります。

于 2014-07-14T14:01:30.860 に答える
0

Vache が書いたように、windowオブジェクトはブラウザーにのみ存在します。ただし、env.jsを使用してブラウザーをシミュレートできます。

このスクリプトをロードすると、オブジェクトにアクセスできるようになりwindowます。

于 2014-07-14T14:02:47.157 に答える
0

@feuerball に感謝します。SOとドキュメントを調べた後、問題の解決策を見つけました。

コードサンプルは次のとおりです。

        import org.mozilla.javascript.Context;
        import org.mozilla.javascript.ContextFactory;
        import org.mozilla.javascript.tools.shell.Global;
        import org.mozilla.javascript.tools.shell.Main;
        .................
        Context cx = ContextFactory.getGlobal().enterContext();
        cx.setOptimizationLevel(-1);
        cx.setLanguageVersion(Context.VERSION_1_5);
        Global global = Main.getGlobal();
        global.init(cx);
        try {
            Main.processSource(cx, "C:\\Desktop\\env.rhino.1.2.js");
            System.out.println(cx.evaluateString(global, "window.atob(\"UmYXNlahcg==\")", "js", 1, null));
        } catch (IOException e) {
            e.printStackTrace();
        }
于 2014-07-15T02:59:29.573 に答える