2010-08-18 63 views
1

在我的XUL應用程序中,我必須進行比運行單個進程更復雜的系統調用,所以我編寫了一個非常簡單的bash文件,其中包含幾個命令,我運行一個用這個bash文件初始化的進程。查找資源的路徑// //或chrome://在XUL中

問題是如何找到文件本身的路徑。通常我使用chrome://或resource://路徑來獲取所需的全部內容。但我需要絕對路徑才能調用此文件。有沒有可靠的方法來獲得它?

回答

2

我用這個功能

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; 
} 

From this forum post