Подтвердить что ты не робот

Вызов метода Bind в JavaScript script в Java Scripting

Предположим, что у меня есть файл 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(...);

Теперь я хотел бы обработать вызов api_method1 в Javascript с моим классом Java. Я хотел бы иметь какое-то отображение/привязку вызовов, т.е. Каждый раз, когда script вызывает api_method1(arg) метод

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

(помещенный в тот же класс, что и движок).

Могу ли я достичь этого?

4b9b3361

Ответ 1

  • используйте engine.createBindings(), чтобы создать объект Bindings;
  • поместите объект, подвергая ваш метод привязкам с некоторым именем:

    Bindings b = engine.createBindings();
    b.put("api", yourApiObject);
    engine.setBindings(b, ScriptContext.ENGINE_SCOPE);
    
  • Тогда в JavaScript будет глобальный объект "api", который вы можете вызвать:

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

Объект прост в использовании, но будьте осторожны с тем, что вы проходите взад и вперед; он не делает так много, чтобы преобразовать типы JavaScript в типы Java.