JAR 清单文件

JAR 清单文件是树形结构中的纯文本文件,用于将 chrome 文件打包到 .jar 文件中并创建 Chrome 注册 清单文件。JAR 清单文件通常命名为 jar.mn。它们在 moz.build 文件中使用 JAR_MANIFESTS 变量声明,该变量构成 jar.mn 文件的集合。在构建 Firefox 时,JAR 清单文件中声明的所有文件都会被处理并安装到 omni.ja 文件中,这些文件位于 browser/toolkit/ 目录下。

jar.mn 文件在构建包含该文件的源目录时会由构建系统自动处理。在传递到清单文件处理器之前,jar.mn 会通过 文本预处理器 进行处理。为了扩展 @variables@(例如 @AB_CD@)在整个文件中,请在 jar.mn 文件的顶部添加行 #filter substitution

jar.mn 的格式相当简单;它包括一个指定正在打包哪个 JAR 文件的标题,以及缩进的行,这些行列出了文件和 chrome 注册指令。

有关简单的 jar.mn 文件,请参见 toolkit/profile/jar.mn。有关更复杂的 jar.mn 文件,请参见 toolkit/locales/jar.mn。下面提供了更多具有特定格式和用途的示例。

发布 Chrome 文件

通用格式

要在 JAR 中发布 chrome 文件,缩进的行表示要打包的文件

<jarfile>.jar:
  path/in/jar/file_name.xul     (source/tree/location/file_name.xul)

请注意,文件路径映射按目标 (左) 后跟源 (右) 列出。

相同目录省略

如果 JAR 清单文件和打包文件位于同一目录中,则可以省略源路径和括号。一个省略源路径和括号的 jar.mn 文件示例是 浏览器/组件/颜色/jar.mn 的此版本

browser.jar:
  content/browser/colorwaycloset.html
  content/browser/colorwaycloset.css
  content/browser/colorwaycloset.js

如果上述文件与 jar.mn 位于同一目录中,则编写以下内容是等效的。请注意,.jar 文件名为 browser.jar

browser.jar:
  content/browser/colorwaycloset.html (colorwaycloset.html)
  content/browser/colorwaycloset.css  (colorwaycloset.css)
  content/browser/colorwaycloset.js   (colorwaycloset.js)

此清单文件负责打包颜色选择器所需的文件,包括 JS 脚本、本地化文件、图像 (例如 PNG、AVIF) 和 CSS 样式。查看 浏览器/组件/颜色/colorwaycloset.html 以了解如何使用其 chrome URL 引用文件。

绝对路径

源代码树位置也可以是绝对路径(从源代码树的顶部获取)。一个这样的示例可以在 工具包/组件/画中画/jar.mn 中找到

toolkit.jar:
  * content/global/pictureinpicture/player.xhtml   (content/player.xhtml)
  content/global/pictureinpicture/player.js      (content/player.js)

星号标记 (预处理)

行首的星号标记 (*) 表示该文件应在打包之前由 文本预处理器 处理。文件 toolkit/profile/jar.mn 指示文件 toolkit/profile/content/profileDowngrade.xhtml 应通过预处理器运行,因为它包含需要解释的 #ifdef#endif 语句

* content/mozapps/profile/profileDowngrade.xhtml  (content/profileDowngrade.xhtml)

基本路径、变量、通配符和本地化文件

.jar 文件位置前面可以有方括号括起来的基本路径。文件 toolkit/locales/jar.mn 使用基本路径,以便 .jar 文件位于 localization 目录下,这是一个 由 mozbuild 解析的特殊目录

它也根据变量 @AB_CD@ 传递的值命名,通常是语言环境。请注意,文件顶部使用预处理器指令 #filter substitution 将变量替换为值

#filter substitution

...

[localization] @AB_CD@.jar:
  crashreporter                                    (%crashreporter/**/*.ftl)
  toolkit                                          (%toolkit/**/*.ftl)

源路径前面的百分号指定要作为源的目标语言环境。默认情况下,这是 en-US。在此特定示例中,将 /toolkit/locales/en-US 作为目标。否则,如果构建本地化版本,则会读取来自备用本地化源代码树 /l10n/<locale>/toolkit/ 的文件。**/*.ftl 中的通配符告诉处理器安装 crashreportertoolkit 目录及其子目录中的所有 Fluent 文件。

注册 Chrome

Chrome 注册 指令以行首的百分号 (%) 标记,并且必须是 JAR 文件定义的一部分。任何其他百分号将替换为正在打包的 JAR 文件的相应相对 URL。

清单文件有两个可能的位置。如果 chrome 正在构建到一个独立的应用程序中,则 jar.mn 处理器会在 JAR 文件本身旁边创建一个 <jarfilename>.manifest。这是默认行为。

如果 moz.build 指定 USE_EXTENSION_MANIFEST = 1,则 jar.mn 处理器会创建一个适合将 chrome 注册为扩展的单个 chrome.manifest 文件。

示例

文件 浏览器/主题/加载项/jar.mn 注册了一个名为 builtin-themesresource chrome 包。其源文件位于 %content/builtin-themes/

browser.jar:
  %  resource builtin-themes %content/builtin-themes/

  content/builtin-themes/alpenglow                 (alpenglow/*.svg)
  content/builtin-themes/alpenglow/manifest.json   (alpenglow/manifest.json)

请注意其他文件如何使用定义的 builtin-themes 资源声明安装目标。因此,主题 Alpenglow 的 SVG 文件 preview.svg 可以使用资源 URL resource://builtin-themes/alpenglow/preview.svg 加载,以便在 about:addons 上提供主题预览。有关 resource 和其他清单文件指令的更多详细信息,请参见 Chrome 注册