2012-01-21 39 views
1

用来做什么的这样的:如何遍历Mozilla Firefox 4.0及更高版本的目录?

// Firefox 3.6 and before; Mozilla 1.9.2 and before 
var ext = this.Cc["@mozilla.org/extensions/manager;1"] 
       .getService(this.Ci.nsIExtensionManager) 
       .getInstallLocation(id) 
       .getItemLocation(id); 

// list all XML files in the installation folder: 
var entries = ext.directoryEntries; 
var files = []; 

while(entries.hasMoreElements()) 
{) 

我现在该如何得到ext变量?据我得到如下所示:

Components.utils.import("resource://gre/modules/AddonManager.jsm"); 
AddonManager.getAddonByID(id, function(addon) { 
    ext = addon.getResourceURI(""); } 

但不知道如何真正得到的目录信息,以遍历它...

回答

0

有可能不是一个目录遍历 - 从火狐4扩展在安装时不再解压缩,因此资源URI将指向一个XPI文件(通过jar:协议方案)。然后再次,在某些情况下,扩展将在安装时解压缩,然后您将获得一个file:/// URI。所以你应该这样做(未经测试):

var uri = addon.getResourceURI(""); 
if (uri instanceof Components.interfaces.nsIJARURI) 
{ 
    var xpiFile = uri.JARFile.QueryInterface(Components.interfaces.nsIFileURL).file; 
    var reader = Components.classes["@mozilla.org/libjar/zip-reader;1"] 
         .createInstance(Components.interfaces.nsIZipReader); 
    reader.init(xpiFile); 
    var enumerator = reader.findEntries(null); 
    while (enumerator.hasMoreElements()) 
    { 
    var entry = enumerator.getNext().QueryInterface(Components.interfaces.nsIZipEntry); 
    alert(entry.name); 
    } 
    reader.close(); 
} 
else if (uri instanceof Components.interfaces.nsIFileURL) 
{ 
    var dir = uri.file; 
    var enumerator = dir.directoryEntries; 
    while (enumerator.hasMoreElements()) 
    { 
    var entry = enumerator.getNext().QueryInterface(Components.interfaces.nsIFile); 
    alert(entry.path); 
    } 
} 
else 
    throw new Error("Unexpected install location");