2014-03-25 59 views
1

我正在构建一个Firefox附加组件。但我无法使用nsIFile获取扩展的文件夹。获取您的扩展的文件夹

我试图

var MY_ID = "[email protected]"; 
var em = Components.classes["@mozilla.org/extensions/manager;1"]. 
     getService(Components.interfaces.nsIExtensionManager); 
// the path may use forward slash ("/") as the delimiter 
// returns nsIFile for the extension's install.rdf 
var file = em.getInstallLocation(MY_ID).getItemFile(MY_ID, "install.rdf"); 
var filestring = file.path; 

var componentFile = __LOCATION__; 
var componentsDir = componentFile.parent; 
var extensionDir = componentsDir.parent; 

,但任何一方都没有工作。是否有任何其他方法来读取扩展的目录,返回nsIFile?

回答

1

扩展在引导程序插件中的安装路径在启动时会保存在aData中。

https://gist.github.com/Noitidart/9026493

var globalPathHolder; 
function startup(aData, aReason) { 
globalPathHolder = aData.installPath.path 
} 

现在,如果你不这样做引导附加组件,您可以使用这样的目录服务:

alert(Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("CurProcD", Ci.nsIFile).path) 

其中CurProcD是一个插件路径I忘记它是什么,但你可以在这里的“获取特殊文件”区域中找到它: https://developer.mozilla.org/en-US/Add-ons/Code_snippets/File_I_O?redirectlocale=en-US&redirectslug=Code_snippets%2FFile_I_O#Getting_special_files

点击mxr链接它有更多的关键词。

您可以使用文件实用程序相同的关键字:

Components.utils.import("resource://gre/modules/FileUtils.jsm"); 
var exefile = FileUtils.getFile("CurProcD", []) 
alert(exefile.path) 
+0

你可以安装在这里检查出的模板插件基本满例子:https://gist.github.com/Noitidart/9026493和https: //gist.github.com/search?q=%40Noitidart+addon – Noitidart