繁体   English   中英

如何从Java代码调用window.atob()JavaScript函数?

[英]How to call window.atob() javascript function from java code?

我正在尝试使用犀牛。 我想使用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进行解码吗?

window (和document ,即document )是与浏览器中的网页绑定的对象。 这些概念在Rhino中不存在,因此您无法访问任何window的方法。

github上有一个请求,要求增加对atob支持。 在那之前,您将必须自己实现它或找到一个包含它的库。

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

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

感谢@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();
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM