Firefox addon 获取资源的完整本地路径://类型url?
如何获取资源的完整本地路径://类型url(即resource://gre/modules/Services.jsm) 对于chrome://类型I,使用以下代码:Firefox addon 获取资源的完整本地路径://类型url?,firefox-addon,Firefox Addon,如何获取资源的完整本地路径://类型url(即resource://gre/modules/Services.jsm) 对于chrome://类型I,使用以下代码: if ((/^(chrome):/.test(url))) { let ios = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces["nsIIOService"]), cr = Compo
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;
}
有什么想法吗
谢谢。
resource://
URI由一个。它可以从
Components.classes["@mozilla.org/network/protocol;1?name=resource"].getService(Ci.nsISubstitutingProtocolHandler)
@8472
多谢各位
使用该接口,我们可以获得完整的本地路径,如下所示:
/**
* 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"));
它接受带有文件://、浏览器://或资源://方案的url字符串