【问题标题】:How can I load a local file from embedded Rhino?如何从嵌入式 Rhino 加载本地文件?
【发布时间】:2012-09-17 14:39:53
【问题描述】:

我正在使用 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') 之类的东西并让它搜索我指定为全局属性的目录。

【问题讨论】:

    标签: rhino embedding


    【解决方案1】:

    我有一个我不太喜欢的答案,尤其是因为它暴露了我很确定是在过去半小时里让我发疯的 Rhino 错误:

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

    { "" + ... 是我解决这个错误的方法——如果你 eval() 一个 Java String (例如从 readFileToString 调用返回)而不手动将其强制转换为 JavaScript 本机字符串,什么也没有似乎发生了。通话只是默默地失败。 }

    这会盲目读取任意文件并对其进行评估——当然,这是你在 Java 端 eval() 时所做的,所以我不太担心。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2017-05-08
      • 2021-05-07
      • 2012-06-01
      相关资源
      最近更新 更多