如何直接初始化Nashorn Context和引擎?

时间:2013-02-19 08:23:14

标签: javascript nashorn

我正在尝试从jdk.nashorn.*命名空间初始化Oracle的javascript nashorn引擎。 (nashorn图书馆是2013年1月的测试版)。

有一个Web示例使用javax.script.ScriptEngineManager实用程序类来调用引擎的Nashorn引擎实例。

var engine = ScriptEngineManager.getEngineByName(*)

但是,我喜欢远离ScriptEngineManager,所以我需要以与Rhino相同的方式直接调用引擎。

Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects();

如何直接创建nashorn引擎实例?

2 个答案:

答案 0 :(得分:3)

javax脚本引擎按类型application / javascript Hashorn,获取脚本引擎并告诉它做的事情,它还提供可调用和可编译的接口。

Yout可能有兴趣阅读:How can I start coding with Oracle's Nashorn JS Engine and when will it replace Rhino in the OpenJDK?

使用示例:

import javax.*; //lib imports
// we should use the javax.script API for Nahsorn
ScriptEngineManager m = new ScripteEngineManager(); 
ScriptEngine e = m.getEngineByname("nashorn");
try {
   e.eval("print('hello nashorn !')");
} catch(Exception e) {
  // using jdk lower then version 8 maybe ?
}

答案 1 :(得分:1)

我找到了直接使用.NET而无需“

”的方法
    "javax.script.ScriptEngineManager"

环境: IKVM.NET版本8 + .NET Framework 4.52

    static void Main(string[] args)
    {

        jdk.nashorn.api.scripting.NashornScriptEngineFactory fact = new jdk.nashorn.api.scripting.NashornScriptEngineFactory();
        jdk.nashorn.api.scripting.NashornScriptEngine nashornengine = fact.getScriptEngine() as jdk.nashorn.api.scripting.NashornScriptEngine;

        nashornengine.eval("var x = 1/3;");
        object result = nashornengine.get("x");
        Console.WriteLine("{0}", result);
    }

这使我可以直接与nashorn上下文方法直接交互。

 compile()
 getFactory()
 invokeMethod()
 invokeFunction()