【问题标题】:Use relative path in Firefox extension在 Firefox 扩展中使用相对路径
【发布时间】:2012-05-26 16:32:33
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: firefox firefox-addon


    【解决方案1】:

    您对 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;
      ...
    });
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 2012-10-06
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        • 2015-01-30
        • 2011-03-10
        相关资源
        最近更新 更多