2012-04-09 30 views
2

我使用捆绑的可执行文件开发Firefox扩展,该扩展应在浏览器启动时运行。在Firefox扩展中使用相对路径

要运行进程,我需要获取指向可执行文件的nsIFile或nsILocalFile实例。 我知道一个解决方案如何得到它使用目录服务:

var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); 
file.append("extensions"); 
file.append("<extension id>"); 
file.append("<relative path>"); 

但这种方法有两个缺点:

  1. 它不会在开发模式下工作,而不是安装的扩展,当我有只有具有真实延伸路径的文本文件

  2. 我不确定它是否适用于所有Firefox配置,因为硬编码的“扩展”部分路径

那么是否有更好的方式来运行Firefox扩展附带的可执行文件?

谢谢。

回答

3

您对Firefox配置文件的目录结构做了太多假设 - 不要。 Add-on Manager API可让您获得扩展名内的文件路径,您应该使用它:

Components.utils.import("resource://gre/modules/AddonManager.jsm"); 

AddonManager.getAddonByID("<extension id>", function(addon) 
{ 
    var uri = addon.getResourceURI("<relative path>"); 
    var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file; 
    ... 
});