2016-04-10 7 views
1

リソースの完全ローカルパスを入手するにはどうすればいいですか://タイプのURL(つまり、リソース://gre/modules/Services.jsm)? Chromeのリソースの完全なローカルパスを取得する:// type url?

if ((/^(chrome):/.test(url))) 
{ 
    let ios = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces["nsIIOService"]), 
     cr = Components.classes['@mozilla.org/chrome/chrome-registry;1'].getService(Components.interfaces["nsIChromeRegistry"]), 
     ph = Components.classes["@mozilla.org/network/protocol;1?name=file"].createInstance(Components.interfaces.nsIFileProtocolHandler); 

    url = cr.convertChromeURL(ios.newURI(url, "UTF-8", null)).spec; 

    if (!/^file:/.test(url)) 
    url = "file://" + url; 

    url = ph.getFileFromURLSpec(url).path; 
} 

任意のアイデア:私は次のコードを使用//タイプ?

ありがとうございます。

答えて

1

resouce://nsISubstitutingProtocolHandlerによって実装されます。それはどうもありがとうございましthe8472 @

Components.classes["@mozilla.org/network/protocol;1?name=resource"].getService(Ci.nsISubstitutingProtocolHandler) 
0

からインスタンス化することができます! //、クローム://またはリソース://それは、ファイルとURL文字列を受け取り

/** 
* http://mxr.mozilla.org/mozilla-release/source/devtools/server/actors/script.js#2086 
* 
* Resolve a URI back to physical file. 
* 
* Of course, this works only for URIs pointing to local resources. 
* 
* @param aURI 
*   URI to resolve 
* @return 
*   resolved nsIURI 
*/ 
function resolveURIToLocalPath(aURI) { 
    let resolved; 
    switch (aURI.scheme) { 
    case "jar": 
    case "file": 
     return aURI; 

    case "chrome": 
     resolved = Cc["@mozilla.org/chrome/chrome-registry;1"]. 
       getService(Ci.nsIChromeRegistry).convertChromeURL(aURI); 
     return resolveURIToLocalPath(resolved); 

    case "resource": 
     resolved = Cc["@mozilla.org/network/protocol;1?name=resource"]. 
       getService(Ci.nsIResProtocolHandler).resolveURI(aURI); 
     aURI = Services.io.newURI(resolved, null, null); 
     return resolveURIToLocalPath(aURI); 

    default: 
     return null; 
    } 
} 

function getLocalPath(url) 
{ 
    let uri = null; 
    try 
    { 
     uri = resolveURIToLocalPath(ios.newURI(url, "UTF-8", null)); 
    } 
    catch(e){} 
    return uri ? uri.spec : uri; 
} 

console.log(getLocalPath("resource://gre/modules/Services.jsm")); 

:私たちはそうのような完全なローカルパスを取得することができ、そのインタフェースを使用して

スキーム

resolveURIToLocalPath

関連する問題