firefox-addonfirefox-addon入门


介绍

附加组件:

Firefox附加组件通常分为Extensions,然后是“其他类型”的Firefox附加组件。

扩展

扩展允许通过添加或修改Firefox的功能来定制Firefox。可以通过扩展完成的一些类型的事情包括:

  • 更改特定网站的显示方式,内容或与之互动的方式。
  • 自定义Firefox用户界面
  • 为Firefox添加其他功能
  • 更改现有Firefox功能的功能

Firefox扩展主要是用JavaScript编写的,并添加了一些JavaScript API。

弃用和删除除WebExtensions之外的所有类型的扩展

Firefox附加组件,特别是扩展,目前处于不稳定状态。 Mozilla已经宣布并确认他们已经弃用了除WebExtensions之外的所有类型的Firefox扩展,并且所有基于非WebExtensions的扩展都将在Firefox 57中被禁用,计划于2017年11月14日推出

扩展类型

Firefox有四种类型的扩展(所有扩展通常称为附加组件):

  • WebExtensions :向前发展,WebExtensions是唯一支持的Firefox扩展类型。这些加载项由manifest.json文件描述。此API类似于用于Google Chrome扩展程序的API。除了Javascript之外,这些加载项还使用HTML和CSS。虽然Mozilla已声明此API是Firefox扩展的未来,但此API仍处于开发阶段。目前,您可能最好使用Firefox Developer EditionFirefox Nightly开发和测试WebExtension插件。您还应该仔细记录您希望使用的功能所需的Firefox版本。此信息包含在MDN文档页面的“浏览器兼容性”部分中。

    WebExtensions使用与其他三种类型的扩展明显不同的API。故意,没有能力使用任何其他附加类型提供的接口。

  • 附加SDK :[ 已弃用;定于去除这些附加组件是由描述的package.json其最初通过执行生成的文件jpm init 。这些扩展通常使用require() 加载高级低级 API以与Firefox连接。除了Javascript之外,这些加载项还使用HTML和CSS。目前,当这些附加组件被加载以通过jpm run 进行测试或通过jpm xpi 合并到.xpi文件中以进行分发(即上传到AMO / Mozilla)时,这些附加组件被包装到引导扩展中。换句话说,它们是带有SDK包装器的自举扩展。

    只要扩展名不使用require("chrome") ,或者依赖于XULXPCOMXBL ,Mozilla似乎承诺继续支持基于附加SDK的扩展。

    可以在引导扩展中完成的大多数事情可以在基于Add-on SDK的扩展中完成。但是,许多此类事情绕过了SDK,这会损害使用Add-on SDK的大部分好处。

  • Bootstrapped :[ 已弃用;计划删除 ]这些扩展通常也称为“无重启”,因为它们是第一种类型的Mozilla扩展,它不需要重新启动应用程序来加载/卸载附加组件。然而,restartless是它们如何运作的描述符。使用“restartless”作为此类附加组件的名称会让人感到困惑,因为Add-on SDK和WebExtension附加组件也不需要在加载或卸载加载项时重新启动应用程序。出于这个原因,有一种趋势是不再使用“无重启”作为这种类型的附加组件的名称。

    除了Javascript之外,这些加载项还使用HTML和CSS。许多人还使用XUL与Firefox交互。

    这些附加组件有一个名为bootstrap.js的JavaScript文件,它必须包含为附加组件startup()shutdown()install()uninstall() 调用的入口点(函数 uninstall()

    这些加载项包含一个描述加载项的install.rdf文件。它们通常(但不总是)也包含chrome.manifest文件,该文件描述扩展中的文件和目录如何与Mozilla应用程序(例如Firefox)相关。

    大多数(但不是全部)可以在overlay / XUL / Legacy扩展中完成的事情可以在bootstrapped附加组件中完成。可以在附加SDK中完成的任何操作都可以在引导扩展中完成(附加SDK扩展是带有一些基于JavaScript的API层的引导附加组件)。

    Mozilla表示他们计划弃用 “依赖于XULXPCOMXBL的附加组件”。虽然并非所有引导附加组件都依赖于这些技术,但引导附加组件的运行倾向于比Add-on SDK和WebExtension附加组件更低的级别。因此,他们更有可能使用这些技术。虽然有些人认为所有自举附加组件都计划被弃用,但目前尚不清楚是否属实。毕竟,Add-on SDK扩展不会被弃用(除非他们使用require("chrome") ,或者依赖于XUL,XPCOM或XBL),并且所有附加SDK扩展都是自举扩展,只需使用SDK包装器。

  • Overlay / XUL / Legacy :[ 已弃用;定于去除这些附加组件包含的install.rdf描述附加和文件chrome.manifest用于文件来描述该加载项的文件如何与(例如叠加)应用程序的文件。应用程序的加载项功能如何完全依赖于chrome.manifest文件中描述的关系。唯一的例外是一些事情,例如扩展的图标和描述扩展的选项的文件,这些选项在install.rdf文件中指出。这些扩展以非常低的级别与应用程序(例如Firefox)交互。这往往会使他们在对应用程序进行更改时更容易中断。

    除了Javascript之外,这些附加组件还使用XUL,HTML和CSS。有些人还使用XPCOMXBL

    计划弃用所有Overlay / XUL / Legacy扩展。

其他类型的Firefox附加组件

当大多数人考虑Firefox附加组件时,他们正在考虑上述扩展。但是,还有一些其他类型的Firefox附加组件:

这个“示例”主要是通过一些修改来复制的,来自我的Makyen's,回答stackoverflow问题
此内容的某些部分是复制的,或至少基于Mozilla Developer Network(MDN)上的Add-on页面
这最初是由Makyenfirefox-addon标签的“备注”部分发布的。然后由OndřejDoněk修改,后者删除了额外的“for”。在由nus执行的单个编辑中,它从“备注”移动到标题为“简介”的固定“示例”。不幸的是,这样做会导致系统丢失归因信息。

安装临时加载项

要测试您正在开发的加载项,您可能希望暂时在Firefox中安装它。您可以通过将其加载为临时加载项来完成此操作 。为此:

  1. 转到about:debugging
  2. 单击“加载临时加载项”
  3. 在文件选择器中,导航到包含附加文件的目录
  4. 选择文件夹中的任何文件
  5. 点击“打开”

下面的动画显示从about:debugging 加载一个名为“aaaaaaaaaaaaaaaaaa - demo add-on”的附加组件,然后加载项显示在about:addons

加载临时加载项

作为临时加载项,您可以加载一个解压缩的附加组件(一个包含要加载到.xpi文件中的加载项的所有文件的目录),或者加载到一个加载项中的加载项.xpi 存档。临时加载项不需要签名 。临时加载项保持安装,直到手动卸载或Firefox重新启动。

Mozilla文档: Firefox中的临时安装

WebExtensions

WebExtensions可以作为临时加载项加载。这可以通过解压缩或打包在.xpi文件中的附加文件来完成。

Firefox附加SDK

您无法将Firefox Add-on SDK扩展加载为临时加载项,而无需先将其打包到带有jpm xpi .xpi文件中。通常,您将使用jpm run 来测试Firefox Add-on SDK扩展。

通常为Add-on SDK扩展编辑的文件在没有一些额外的包装函数并且package.json文件被转换为install.rdf文件以及可能的chrome.manifest文件时不会进行完整扩展。此过程将Add-on SDK扩展包装到Bootstrap / Restartless附加组件中,这是Firefox所理解的。如果没有此过程,Firefox将无法加载该加载项。此过程由jpm xpi 执行,从而生成打包的.xpi文件。执行jpm run 也会执行此过程,但会将生成的文件存储在临时位置,并在安装了加载项的情况下调用Firefox。

引导/无需重启

Bootstrap / Restartless附加组件可以作为临时加载项加载。这可以通过解压缩或打包在.xpi文件中的附加文件来完成。

旧版/覆盖/ XUL

Legacy / Overlay / XUL加载项无法作为临时加载项加载。

安装附加组件以进行开发

附加组件可以安装为:

  1. 正常的加载项,安装到卸载之前
  2. 临时加载项(仅限扩展 ):仅在重新启动Firefox之前安装,或者可以先安装手动卸载。
  3. 使用jpm run (仅限附加组件SDK ):使用加载加载项的临时配置文件自动运行Firefox。
  4. 使用web-ext run 仅限WebExtensions ):使用临时配置文件自动运行Firefox,并将加载项作为临时加载项加载。默认情况下,监视扩展文件以进行更改,并在文件更改时自动重新加载扩展。

普通附加组件

安装打包的扩展 (即.xpi 文件)可以简单地将其拖放到运行您希望安装它的配置文件的Firefox窗口上。也可以通过从AMO下载扩展程序直接安装它们。根据您的目标(一个配置文件,所有配置文件,所有用户,哪个操作系统等),还有其他选项可用于安装扩展

这些其他选项包括配置文件目录之外的各种目录,您可以将.xpi文件放入其中,以便为特定版本的Firefox的所有用户或特定用户的所有配置文件安装.xpi文件。在Windows上,您还可以通过向Windows注册表添加密钥来安装扩展。通常,这些其他目录不是您要安装当前正在编写的加载项的目录。但是,它们可用于确保您使用附加组件来支持在您使用的任何Firefox配置文件或Firefox版本中加载的测试/开发。例如,通过将.xpi文件放在<Firefox install directory>/browser/extensions ,即使在jpm run 创建的临时配置文件中也可以使用扩展名(用于测试基于Firefox Add-on SDK的扩展)。

对于开发/测试 ,您可以使用Firefox扩展代理文件将扩展名放在本地驱动器上的任何目录中(创建一个名为扩展名<em:id> (在install.rdf中用于Bootstrap / Restartless和Overlay /在配置文件的扩展目录中包含一行,其中包含包含扩展文件的目录的完整路径)。以这种方式安装的扩展几乎总是无符号的(见下文)。因此,如果要将扩展安装到Firefox的发行版或Beta版中,则此方法不是很有用。

安装普通附加组件的限制:附加组件签名

为了将扩展作为普通附加组件安装到大于或等于版本48的Firefox版本或Beta版本中,扩展必须 由Mozilla签名 。通过向AMO提交延期签名。签名后,扩展可以安装在它支持的任何版本的Firefox上。对于版本43之前的Firefox版本,Mozilla不需要对扩展进行签名。 Mozilla不需要对扩展以外的加载项类型进行签名。

您可以通过在about:config xpinstall.signatures.required 设置为false ,将未签名的扩展名作为普通加载项安装到其他版本的Firefox(例如Firefox Developer EditionFirefox NightlyUnbranded Beta或Unbranded Release )中。设置此选项在Release和Beta Firefox版本43-48中也很有效。从版本48开始,在Firefox的发行版和Beta版中设置此选项无效。

但是,您可以在所有版本(包括发行版)中完全禁用Firefox中的加载项签名检查。 Stack Overflow问题的答案如何禁用Firefox附加组件的签名检查?描述了如何做到这一点。

安装扩展作为临时附加组件的可用性大大减少了为开发目的安装未签名附加组件的需要 。临时加载项不需要签名,可以加载到任何当前版本的Firefox中。顾名思义,Temporary Add-ons的主要缺点是它们是临时的。必须在重新启动Firefox时重新安装它们。但是,在某些用例中,最好将附加组件安装为普通加载项,而不是未签名的附加组件,而不是临时加载项。如果即使重新启动Firefox后仍需要加载项仍然安装,则应将加载项安装为未签名的加载项。出于各种原因,这可能是可取的,包括:长期使用测试,或测试Firefox启动时附加组件的功能。

临时附加组件( 仅限扩展

WebExtensions,基于Firefox Add-on SDK的扩展和Restartless / Bootstrap扩展可以作为临时附加组件about:debugging 。扩展可以在任何当前版本的Firefox中作为临时加载项加载。临时加载项不需要签名,可以从解压缩(带文件的目录)或打包(例如.xpi文件)加载。

有关临时安装扩展的详细信息,请参阅安装临时加载项

安装未签名的附加组件

为了将扩展作为普通附加组件安装到大于或等于版本48的Firefox版本或Beta版本中,扩展必须 由Mozilla签名 。通过向AMO提交延期签名。签名后,扩展可以安装在它支持的任何版本的Firefox上。对于版本43之前的Firefox版本,Mozilla不需要对扩展进行签名。 Mozilla不需要对扩展以外的加载项类型进行签名。

您可以通过在about:config xpinstall.signatures.required 设置为false ,将未签名的扩展名作为普通加载项安装到其他版本的Firefox(例如Firefox Developer EditionFirefox NightlyUnbranded Beta或Unbranded Release )中。设置此选项在Release和Beta Firefox版本43-48中也很有效。从版本48开始,在Firefox的发行版和Beta版中设置此选项无效。

安装扩展作为临时附加组件的可用性大大降低了在附加开发期间能够安装未签名附加组件的需求 。临时加载项不需要签名,可以加载到任何当前版本的Firefox中。顾名思义,Temporary Add-ons的主要缺点是它们是临时的。必须在重新启动Firefox时重新安装它们。但是,在某些用例中,最好将附加组件安装为普通加载项,而不是未签名的附加组件,而不是临时加载项。如果即使重新启动Firefox后仍需要加载项仍然安装,则应将加载项安装为未签名的加载项。出于各种原因,这可能是可取的,包括:长期使用测试,或测试Firefox启动时附加组件的功能。