假设我有一个JS函数,
function sum(a,b){
return a+b;
}
var a = sum(10,20);
现在,如果我使用ScriptEngine执行此操作,如下所示
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.eval(inputString);
Bindings bindings = engine.getBindings(100);
for(String s:bindings.keySet()){
System.out.println(engine.get(s));
}
总是给出评估值,如a = 30
。所以我的问题是也可以从ScriptEngine获得function sum(a,b){...}
。
有一种方法可以将encodedSource作为
InterpretedFunction.class.cast(bindings.get("sum")).getEncodedSource()
但有什么东西可以解码来源吗?
答案 0 :(得分:0)
将eval的引擎转换为Invocable
会让您了解许多有用的功能:
private Invocable getInvocableJSEngine() throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
engine.eval(script);
return (Invocable) engine;
}
...
getInvocableJSEngine().invokeFunction("sum",a,b);