Включение файла JavaScript во время Rhino eval
Как включить сценарий «Панель»? из другого скрипта & quot; Foo & quot; это оценивается движком Rhino, работающим на Java.
IE, настройте механизм сценариев следующим образом в Java:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
BufferedReader br = new BufferedReader(new FileReader(new File("Foo.js")));
engine.eval(br);
... и поместите в Foo следующее:
load(["Bar.js"])
В соответствии сRhino shell документацияЭто способ сделать это. Но при запуске из Java это явно не реализовано:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "load" is not defined.
@Phillip:
Спасибо за творческий ответ. Ваше решение не работает, потому что eval не делает доступной проанализированную функцию, если не используется интерфейс Invocable. Кроме того, он не работает в случаях, когда код Java недоступен. Я подробно остановился на вашем обходном пути и создал что-то, что будет работать в чистом JS:
Сначала создайте движок, предоставляющий интерфейс Invocable:
var engine = new Packages.javax.script.ScriptEngineManager().getEngineByName("javascript");
engine = Packages.javax.script.Invocable(engine);
Тогда "load ()" сценарий (ы)
engine.eval(new java.io.FileReader('./function.js'));
На этом этапе функции могут быть оценены с помощью:
engine.invokeFunction("printHello", null);