2010-08-18 2 views
1

XUL 어플리케이션에서 단일 프로세스를 실행하는 것보다 더 복잡한 시스템 호출을해야하므로 매우 간단한 bash 파일을 몇 개의 명령과 나는이 bash 파일로 초기화 된 프로세스를 실행한다.XUL에서 리소스 : // 또는 chrome : //을 찾으십시오.

문제는 파일 자체의 경로를 찾는 방법입니다. 일반적으로 나는 필요한 모든 것을 위해 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

을 사용했습니다.

관련 문제