1

我正在尝试使用犀牛。我想使用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,当我们在这里时)是与浏览器中的网页相关联的对象。这些概念在 Rhino 中不存在,因此您无法访问任何window's 方法。

github上有一个请求添加支持atob。在那之前,您必须自己实现它或找到一个拥有它的库。

于 2014-07-14T14:01:30.860 回答
0

正如 Vache 所写,该window对象仅存在于浏览器中。但是,您可以使用env.js模拟浏览器。

加载此脚本后,您可以访问该window对象。

于 2014-07-14T14:02:47.157 回答
0

感谢@feuerball。经过 SO 和 Docs 后,我找到了解决问题的方法。

这是代码示例:

        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 回答