如何一个将包括脚本“酒吧”从另一个脚本“富”正由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"])
据犀牛程序文档 ,这是应该做的方式。 但是从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);
那么, “负荷()” 脚本(S)
engine.eval(new java.io.FileReader('./function.js'));
在这一点上,功能可与评估:
engine.invokeFunction("printHello", null);