Firefox 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() 调用的入口点(函数)

    这些加载项包含一个描述加载项的 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执行的单个编辑中,它从备注移动到标题为简介的固定示例。不幸的是,这样做会导致系统丢失归因信息。