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 Edition 或 Firefox 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")
,或者依赖于 XUL , XPCOM 和 XBL ,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 表示他们计划弃用 “依赖于 XUL , XPCOM和 XBL的附加组件 ”。虽然并非所有引导附加组件都依赖于这些技术,但引导附加组件的运行倾向于比 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。有些人还使用 XPCOM 和 XBL 。
计划弃用所有 Overlay / XUL / Legacy 扩展。
其他类型的 Firefox 附加组件
当大多数人考虑 Firefox 附加组件时,他们正在考虑上述扩展。但是,还有一些其他类型的 Firefox 附加组件:
- 主题 [ 部分弃用 ]允许自定义 Firefox 的外观。主要是通过为浏览器的所有部分提供不同的 CSS 规则。 完整主题已弃用,并计划部分替换为当前不存在的界面 。
- 适用于 Android 的 Firefox 移动附加组件 。目前,支持所有无重启的 Firefox 扩展类型。
- 搜索引擎插件用于将其他搜索引擎添加到浏览器的搜索栏。
- 用户词典允许在其他语言中使用拼写检查。
- 语言包为 Firefox 用户界面添加其他语言。
- 插件是共享库,用于显示应用程序本身无法本机显示的内容。
这个示例主要是通过一些修改来复制的,来自我的 Makyen’s,回答 stackoverflow 问题 。
此内容的某些部分是复制的,或至少基于 Mozilla Developer Network(MDN)
上的 Add-on 页面 。
这最初是由 Makyen 在 firefox-addon 标签的备注部分发布的。然后由 OndřejDoněk修改,后者删除了额外的 for
。在由 nus执行的单个编辑中,它从备注移动到标题为简介的固定示例。不幸的是,这样做会导致系统丢失归因信息。