如何从嵌入式Rhino加载本地文件?

时间:2012-09-17 14:39:53

标签: rhino embedding

我正在使用Rhino的context.evaluateString()从Java内部运行一些简单的JavaScript。它是Embedding Javascript guide中的教科书:

String script = // simple logic
Context c = new ContextFactory().enterContext();
ScriptableObject scope = context.initStandardObjects();
Object o = context.evaluateString(scope, script, "myScript", 1, null);
ScriptableObject result = Context.jsToJava(o, ScriptableObject.class);

我不确定这是目前最好的做法,因为主要的Rhino文档看起来已经失效,但到目前为止它还在运行。

我希望能够引用工作目录中的库 - 我看到Rhino shell supports load,但我认为这不适用于嵌入引擎。

这可能吗?是否记录在任何地方?理想情况下,我希望能够只调用类似load('other.js')的内容,并将其指定为我指定为全局属性的目录。

1 个答案:

答案 0 :(得分:0)

我有一个我不喜欢的答案,尤其是因为它暴露了我非常确定的犀牛虫在过去半小时让我疯狂的事情:

eval("" + Packages.org.apache.commons.io.FileUtils.readFileToString(
  new java.io.File("/the/local/root", "script.js");
));

{"" + ...是我解决错误的方法 - 如果你eval()一个Java String(例如从readFileToString调用返回)而没有手动强制它是一个JavaScript本机字符串,似乎没有任何事情发生。电话只是默默地失败了。 }

这盲目地读取一个任意文件并对其进行篡改 - 当然,这是你从Java端{my} eval()时所做的,所以我不会太担心它。

无论如何,由于多种原因它并不优雅,但它有效。我很乐意听到更好的答案!