W tym plik JavaScript podczas Rhino eval

Jak dodać skrypt „Bar” z innego skryptu „Foo”, który jest oceniany przez silnik Rhino, działający w Javie.

IE, ustaw silnik skryptów tak jak w Javie:

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
BufferedReader br = new BufferedReader(new FileReader(new File("Foo.js")));
engine.eval(br);

... i umieść w Foo następujące:

load(["Bar.js"])

WedługDokumentacja powłoki Rhino, w ten sposób to zrobić. Ale podczas pracy z Javą nie jest to wyraźnie zaimplementowane:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "load" is not defined.

@ Phillip:

Dziękuję za twórczą odpowiedź. Twoje rozwiązanie, jak jest, nie działa, ponieważ eval nie udostępnia funkcji analizowanej, dopóki nie zostanie użyty interfejs Invocable. Ponadto nie działa w przypadkach, gdy kod Java jest niedostępny. Omówiłem twoje obejście i stworzyłem coś, co będzie działać w czystym JS:

Najpierw utwórz silnik, eksponując interfejs Invocable:

var engine = new Packages.javax.script.ScriptEngineManager().getEngineByName("javascript");
engine = Packages.javax.script.Invocable(engine);

Następnie „wczytaj ()” skrypt (y)

engine.eval(new java.io.FileReader('./function.js'));

W tym momencie funkcje można oceniać za pomocą:

engine.invokeFunction("printHello", null);

questionAnswers(1)

yourAnswerToTheQuestion