4

我正在 Rhino 中编写一个 JavaScript 程序,它需要加载其他 JavaScript 文件。但是,内置load()函数相对于当前目录加载文件,我需要相对于脚本的位置加载它们(以便可以从任何目录调用程序)。

在其他语言中,我会使用类似的东西dirname(__FILE__) + "/path/file",但似乎 Rhino 没有__FILE__或类似的东西。我试图从抛出的异常中提取当前文件,但它是空的,即以下代码打印“true”:

try {
  throw new Error();
} catch (e) {
  print(e.fileName === "");
}

我试图查看解释器源代码并使用 Java-JavaScript 桥,但我还没有发现任何有用的东西(我可能会看更多)。

有没有人有提示如何在相对路径上加载文件?

4

1 回答 1

3

让用户运行启动器脚本可能是最容易的。如果您在 *nix 或 OS X 上,您可以将 shell 脚本放入与所有 Javascript 相同的目录中,这会在启动之前将目录更改为脚本的目录:

#!/bin/sh
cd `dirname "$0"`
java -jar js.jar your_script.js

如果您的脚本需要在用户的当前目录中运行,您可以让包装器在命令行中传递其位置:

#!/bin/sh
DIR=`basename "$0"`
java -jar "$DIR/js.jar" "$DIR/loader.js" "$DIR"

然后在 loader.js 中,使用 Rhino 的内置 arguments 变量来访问“$DIR”:

load(arguments[0] + "/another_js_file.js");

Rhino 函数在此处记录。

在 Windows 上可能会出现类似的情况;我不太了解 CMD.EXE 批处理文件。

于 2010-02-20T17:53:47.953 回答