我正在尝试从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引擎实例?
答案 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()