3

我使用捆绑的可执行文件开发 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 扩展附带的可执行文件?

谢谢。

4

2 回答 2

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;
  ...
});
于 2012-05-26T08:32:33.120 回答
2

无重启插件的startup函数(在bootstrap.js文件中)将接收插件的安装路径作为其第一个参数。然后,您可以使用各种技巧来读取文件中的.jar文件(如果有):请参阅https://github.com/protz/GMail-Conversation-View/blob/master/bootstrap.js#L55作为示例。

在一个非重启的情况下,我必须承认我没有太多的想法:)。

于 2012-04-09T14:45:08.270 回答