我想使用Java7的嵌入式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是保留关键字。但是,ECMAScript 5中不再保留char,所以我完全搞不懂了。问题是哪个javascript版本应该与java7中的嵌入式Rhino一起工作?
我使用的是java 1.7.0_80,引擎上报的语言版本是1.8,引擎版本是1.7 release 3 PRERELEASE。
发布于 2015-10-21 00:11:45
正如@RealSkeptic指出的那样,OpenJDK 7 (Rhino 1.7 r4)的嵌入式脚本引擎运行上面的javascript代码片段没有问题。看起来Rhino 1.7 r3不能运行它,所以使用Oracle Java7运行它需要可以从here下载的1.7 r4 (或更高版本)的外部Rhino。为了完整起见,基于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一起使用,这将不起作用。
https://stackoverflow.com/questions/33211039
复制相似问题