【问题标题】:How do I load a local file from rhino embedded in a vendor product?如何从供应商产品中嵌入的 rhino 加载本地文件?
【发布时间】:2014-07-25 18:12:21
【问题描述】:

我的问题与How can I load a local file from embedded Rhino? 非常相似。

我读过的大多数建议都建议修改 java 代码,但我使用的是嵌入在供应商软件(Shibboleth 和 NetIQ IDM)中的 Rhino,所以我无法访问 Rhino 存在的上下文(或创建它的代码),只有在该上下文中生成的脚本引擎。

Corderer 建议做类似...

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

...这行得通!不过,像 Corderer 一样,我希望有一个不那么丑陋的解决方案(也许实际上能够使用 load())。 eval() 是最好/最简单的选择吗?

利亚姆

【问题讨论】:

    标签: java javascript rhino


    【解决方案1】:

    也许我遗漏了一些东西,但据我了解,您只想从 JavaScript 中读取磁盘上的文件。如果是这样,您可以这样做:

    var fileObj = new java.io.File("/the/local/root/somefile.txt");
    

    这基本上可以让您访问 Java 文件对象,然后您可以随意操作它。请参阅documentation for the java.io.File class 以了解可用的方法。

    编辑:在进一步审查问题后,您似乎想从 JavaScript 中加载 JavaScript 源文件。如果是这样,那么您可以像这样使用 Rhino 的内置 load 命令:

    load("/the/local/root/script.js");
    

    【讨论】:

    【解决方案2】:

    多年后,这是我的看法: 创建一个缺少 load 函数的 Global 对象。

    g = new Packages.org.mozilla.javascript.tools.shell.Global(Packages.org.mozilla.javascript.Context.getCurrentContext());
    this.load = g.load;
    

    g 变量现在保存在 Rhino 脚本中使用的 global 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 2014-11-16
      • 2022-06-11
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      相关资源
      最近更新 更多