我想使用 Java 7 的嵌入式 javascript 引擎运行 javascript。我尝试运行的代码符合 ECMAScript 5,这应该不是问题,因为嵌入式 Rhino 的版本是 1.7 release 3。支持它。然而,运行以下代码段不起作用:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval("var char = 'a';");
它因错误 missing variable name
而失败,这表明 char
是保留关键字。但是,char
在 ECMAScript 5 中不再保留,所以我完全糊涂了。问题是哪个 javascript 版本应该与 java 7 中的嵌入式 Rhino 一起工作?
我使用的是java 1.7.0_80
,引擎报告的语言版本是1.8
,引擎版本是1.7 release 3 PRERELEASE
.
最佳答案
正如@RealSkeptic 所指出的,OpenJDK 7 (Rhino 1.7 r4
) 的嵌入式脚本引擎在运行上述 javascript 片段时没有问题。好像Rhino 1.7 r3
不能运行,所以使用Oracle Java 7运行需要1.7 r4
(或以上)的外部Rhino,可以从here下载。为了完整起见,问题中基于 Rhino 自己的 API 的代码的 java 等效项如下所示:
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ScriptableObject;
public class Rhino {
public static void main(String[] args) throws Exception {
Context context = Context.enter();
try {
ScriptableObject scope = context.initStandardObjects();
context.evaluateString(scope, "var char = 'a'", "test", 1, null);
} finally {
Context.exit();
}
}
请注意,导入声明很重要,因为相同的类可以捆绑在 JDK 中的不同包中:
import sun.org.mozilla.javascript.internal.Context;
import sun.org.mozilla.javascript.internal.ScriptableObject;
导入它们会导致将嵌入式引擎与 Rhino 的 API 一起使用,这将无法正常工作。
关于javascript - 在 Java 7 上运行符合 ECMAScript 5 的 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33211039/