2010-02-20 20 views
3

我正在Rhino中編寫一個需要加載其他JavaScript文件的JavaScript程序。然而,內置的load()函數加載相對於當前目錄的文件,我需要將它們加載到腳本的位置(以便程序可以從任何目錄調用)。將文件加載到Rhino當前文件的相對路徑中

在其他語言中,我會使用類似dirname(__FILE__) + "/path/file"的東西,但似乎犀牛沒有__FILE__或類似的東西。我試圖從拋出的異常提取當前文件,但它是空的,即下面的代碼打印「真」:

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

我想看看解釋來源和使用Java,JavaScript的橋樑,但我沒有找到有用的東西(我可能會看起來更多)。

有沒有人有提示如何使相對路徑上的加載文件的工作?

回答

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的變量來訪問「$ DIR」內置參數:

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

犀牛功能記錄在here

Windows上可能有類似的東西;我不太瞭解CMD.EXE批處理文件。

+0

我想過一個包裝腳本,但只是作爲最後的手段。由於似乎沒有其他方式,我最終使用它。感謝您的回答。 – 2010-02-23 08:57:47

+0

有沒有人知道這個腳本在Windows上的樣子? – spankmaster79 2015-05-12 07:50:43