4

他のJavaScriptファイルをロードする必要があるJavaScriptプログラムをRhinoで書いています。ただし、組み込みload()関数は現在のディレクトリに対してファイルを相対的にロードするため、スクリプトの場所に対して相対的にファイルをロードする必要があります(プログラムを任意のディレクトリから呼び出すことができるようにするため)。

他の言語では、のようなものを使用しますがdirname(__FILE__) + "/path/file"、Rhinoにはない__FILE__ようです。スローされた例外から現在のファイルを抽出しようとしましたが、空です。つまり、次のコードは「true」を出力します。

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

インタプリタのソースを調べてJava-JavaScriptブリッジを使用しようとしましたが、まだ役立つものは見つかりませんでした(おそらくもっと調べます)。

相対パスでファイルをロードする方法のヒントはありますか?

4

1 に答える 1

3

ユーザーにランチャースクリプトを実行させるのがおそらく最も簡単です。*nixまたはOSXを使用している場合は、シェルスクリプトをすべての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の組み込み引数変数を使用して「$DIR」にアクセスします。

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

Rhino関数はここに文書化されています。

同様のことがWindowsでも可能かもしれません。CMD.EXEバッチファイルについてはよくわかりません。

于 2010-02-20T17:53:47.953 に答える