1
在我的XUL應用程序中,我必須進行比運行單個進程更復雜的系統調用,所以我編寫了一個非常簡單的bash文件,其中包含幾個命令,我運行一個用這個bash文件初始化的進程。查找資源的路徑// //或chrome://在XUL中
問題是如何找到文件本身的路徑。通常我使用chrome://或resource://路徑來獲取所需的全部內容。但我需要絕對路徑才能調用此文件。有沒有可靠的方法來獲得它?
在我的XUL應用程序中,我必須進行比運行單個進程更復雜的系統調用,所以我編寫了一個非常簡單的bash文件,其中包含幾個命令,我運行一個用這個bash文件初始化的進程。查找資源的路徑// //或chrome://在XUL中
問題是如何找到文件本身的路徑。通常我使用chrome://或resource://路徑來獲取所需的全部內容。但我需要絕對路徑才能調用此文件。有沒有可靠的方法來獲得它?
我用這個功能
function chromeToPath (aPath) {
if (!aPath || !(/^chrome:/.test(aPath)))
return; //not a chrome url
var rv;
var ios = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces["nsIIOService"]);
var uri = ios.newURI(aPath, "UTF-8", null);
var cr = Components.classes['@mozilla.org/chrome/chrome-registry;1'].getService(Components.interfaces["nsIChromeRegistry"]);
rv = cr.convertChromeURL(uri).spec;
if (/^file:/.test(rv))
rv = this.urlToPath(rv);
else
rv = this.urlToPath("file://"+rv);
return rv;
}
function urlToPath (aPath) {
if (!aPath || !/^file:/.test(aPath))
return ;
var rv;
var ph = Components.classes["@mozilla.org/network/protocol;1?name=file"]
.createInstance(Components.interfaces.nsIFileProtocolHandler);
rv = ph.getFileFromURLSpec(aPath).path;
return rv;
}