首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java7上运行兼容ECMAScript 5的javascript

在Java7上运行兼容ECMAScript 5的javascript
EN

Stack Overflow用户
提问于 2015-10-19 17:31:09
回答 1查看 548关注 0票数 5

我想使用Java7的嵌入式javascript引擎运行javascript。我尝试运行的代码是兼容ECMAScript 5的,这应该不是问题,因为嵌入式Rhino的版本是支持它的1.7 release 3。然而,运行以下代码片段并不起作用:

代码语言:javascript
运行
复制
    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

EN

回答 1

Stack Overflow用户

发布于 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等价物如下所示:

代码语言:javascript
运行
复制
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中的不同包中捆绑了相同的类:

代码语言:javascript
运行
复制
import sun.org.mozilla.javascript.internal.Context;
import sun.org.mozilla.javascript.internal.ScriptableObject;

导入它们将导致嵌入式引擎与Rhino的API一起使用,这将不起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33211039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档