簡體   English   中英

在Java 7上運行符合ECMAScript 5的javascript

[英]Running ECMAScript 5 compliant javascript on Java 7

我想使用Java 7的嵌入式javascript引擎運行javascript。我嘗試運行的代碼符合ECMAScript 5,這應該不是問題,因為嵌入式Rhino的版本是支持它的1.7版本3 但是,運行以下代碼段不起作用:

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    engine.eval("var char = 'a';");

它失敗,錯誤missing variable name ,表明char是保留關鍵字。 但是,在ECMAScript 5中不再保留char ,所以我完全感到困惑。 問題是哪個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,可從此處下載。 為了完整起見,基於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,這將無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM