Java 脚本中的绑定方法调用 Java 脚本中的 Java 脚本

2022-09-02 01:53:05

假设我有一个Javascript文件

function js_main(args){
     /* some code */
     var x = api_method1(some_argument);
     /* some code */
}

我尝试以通常的方式运行它javax.scripting

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
engine.eval(...);

现在,我想用我的 Java 类来处理对 Javascript 的调用。我希望有某种调用的映射/绑定,即每次脚本调用一个方法时api_method1api_method1(arg)

public Object api_method1(Object arg){ ... }

(放置在与引擎相同的类中)将被调用。

我能做到这一点吗?


答案 1
  1. 用于制作绑定对象;engine.createBindings()
  2. 将一个公开方法的对象放入具有一定名称的绑定中:

    Bindings b = engine.createBindings();
    b.put("api", yourApiObject);
    engine.setBindings(b, ScriptContext.ENGINE_SCOPE);
    
  3. 然后在JavaScript中,将有一个全局“api”对象,你可以调用:

    api.method1( "foo", 14, "whatever" );
    

该设施易于使用,但要小心来回传递的内容;它将JavaScript类型转换为Java类型并没有做太多事情。


答案 2