【问题标题】:How to call window.atob() javascript function from java code?如何从 java 代码中调用 window.atob() javascript 函数?
【发布时间】:2014-07-14 13:54:08
【问题描述】:

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

【问题讨论】:

    标签: java javascript rhino scriptengine


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 如何使用 env.js 获取窗口对象
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-07-29
        • 1970-01-01
        • 2014-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        相关资源
        最近更新 更多