2015-10-19 23 views
4

我想使用Java 7的嵌入式JavaScript引擎運行JavaScript。我試圖運行的代碼是符合ECMAScript 5的,因爲嵌入式Rhino的版本不應該是問題是支持它的1.7 release 3。然而,運行下面的代碼片段不起作用:在Java 7上運行符合ECMAScript 5標準的JavaScript

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

它失敗,這表明char是保留關鍵字錯誤missing variable name。但是,ECMAScript 5中不再保留char,所以我完全困惑。問題是哪個JavaScript版本應該在java 7中與嵌入式Rhino一起工作?

我使用java 1.7.0_80,引擎報告的語言版本爲1.8,引擎版本爲1.7 release 3 PRERELEASE

+1

這個腳本在Java 7(OpenJDK,Linux)中不會失敗。它工作得很好。 – RealSkeptic

+0

@RealSkeptic確實,它似乎OpenJDK包含'Rhino 1.7 r4'。由於我不能移動到OpenJDK,因此我會嘗試使用'Rhino 1.7 r4'作爲外部的jar。無論如何,感謝您的發現。 – Katona

回答

1

正如@RealSkeptic指出的那樣,OpenJDK 7的嵌入式腳本引擎(Rhino 1.7 r4)在運行上面的javascript代碼片段時沒有問題。看起來Rhino 1.7 r3不能運行它,所以使用Oracle Java 7運行它需要可以從here下載的1.7 r4(或更高版本)的外部Rhino。只是爲了完整性,相當於Java中的基於犀牛自己的API問題的代碼如下所示:

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的嵌入式引擎時不起作用。

相關問題