Вызов интерпретатора JavaScript из сценария
-
10-07-2019 - |
Вопрос
Я написал несколько скриптов на Javascript под Rhino 1.7, один из них запускает минимальный http-сервер и принимает на вход команды JS.
Теперь, если я позвоню (изнутри Rhino):
engine = ScriptEngineManager().getEngineByName("JavaScript");
Я получил встроенный движок JS (из Java 1.6), который является более старой версией Rhino и в котором отсутствуют некоторые функции (например, JavaAdapter для нескольких интерфейсов).
Как мне получить Rhino Engine вместо этого? Нужно ли ScriptEngineManager.getEngineFactories () или что еще?
Решение 2
Я узнал это сам (методом проб и ошибок). Как отмечалось выше, Rhino не регистрирует завод по производству двигателей. Вы можете получить текущий движок (в виде контекста и объекта с возможностью написания сценариев):
cx = Context.getCurrentContext();
scope = new ImporterTopLevel(cx);
С этими объектами я могу запускать свои сценарии или командные строки, используя evalString / evalReader.
Другие советы
Чего вы хотите добиться, так это выбрать определенную версию обработчика сценариев, который реализует «JavaScript». Правильный способ сделать это - вызвать ScriptEngineManager.getEngineFactories ()
, а затем проверить результаты getLanguageName ()
и getEngineVersion ()
. р>
Прежде чем вызывать исходный скрипт, почему бы вам не установить движок, который вы используете в качестве переменной контекста внутри скрипта? Таким образом, внутри скрипта вы получите доступ к движку, который его запускает.