Включение файла 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);

Ответы на вопрос(1)

Ваш ответ на вопрос