我正在尝试使用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吗?
答案 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();
}