获取您的扩展程序的文件夹

时间:2014-03-25 08:45:02

标签: firefox firefox-addon

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

我试过

var MY_ID = "myextension@my.name";
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 个答案:

答案 0 :(得分:1)

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

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

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

现在,如果你没有做bootstrap插件,你可以使用这样的目录服务:

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

其中CurProcD是插件路径的那个我忘了它是什么但是你可以在"获取特殊文件"这里的区域: 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链接,它有更多的关键词。

您可以在FileUtils中使用相同的关键字:

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