如何从java代码调用window.atob()javascript函数?

时间:2014-07-14 13:54:08

标签: java javascript rhino scriptengine

我正在尝试使用rhino。我想从java代码中使用window.atob(param) 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吗?

3 个答案:

答案 0 :(得分:1)

window(以及document,而我们在其中)是与浏览器中的网页相关联的对象。 Rhino中不存在这些概念,因此您无法访问任何window方法。

虽然可以request on github添加对atob的支持。在那之前,你必须自己实现它或找到一个拥有它的库。

答案 1 :(得分:0)

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

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

答案 2 :(得分: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();
        }