如何在Rhino引擎評估的另一個腳本「Foo」中包含腳本「Bar」,運行在Java中。在Rhino eval期間包含JavaScript文件
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 documentation,這是應該做的方式。但是從Java運行時,它顯然沒有實現:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "load" is not defined.
@Phillip:
感謝您的創造性的反應。您的解決方案不太可行,因爲除非使用Invocable接口,否則eval不會使解析的函數可用。此外,它在Java代碼不可訪問的情況下不起作用。我闡述了您的解決辦法,創造的東西,將純JS的工作:
首先創建一個引擎,露出了Invocable接口:
var engine = new Packages.javax.script.ScriptEngineManager().getEngineByName("javascript");
engine = Packages.javax.script.Invocable(engine);
然後「負載()」腳本(S)
engine.eval(new java.io.FileReader('./function.js'));
在這一點上,功能可與評估:
engine.invokeFunction("printHello", null);
注意:這不是在Rhino shell或瀏覽器中執行。 –