Firefox扩展名.xpi文件结构:描述,内容,创建和安装

时间:2015-06-16 10:57:28

标签: google-chrome-extension firefox-addon firefox-addon-sdk firefox-webextensions

我在搜索开发Firefox扩展的简单方法中添加了很多东西,但我无法创建扩展。请告诉我Firefox扩展的文件结构以及安装扩展的简单方法。

2 个答案:

答案 0 :(得分:3)

.xpi file formatExtension Packaging

用作Mozilla(Firefox,Thunderbird等)扩展程序容器的.xpi文件只是zip文件,文件扩展名已更改为.xpi,文件已添加到存档中使用" deflate"压缩或未压缩。如果您使用任何其他类型的压缩,除了" deflate"或"存储" (未压缩),您将收到如下错误:

This add-on cannot be installed because it appears to be corrupted

文件从zip压缩存档的根目录开始(即一个空的第一级目录,然后包含文件)。

存档的内容可能只是几个文件到任意数量的文件。 必须包含的文件取决于您要打包的加载项的类型。如果您打算使用Add-on SDK,那么您可能不需要知道这些文件的格式,因为使用jpm工具可以将其抽象化。如果您不知道我在说什么,您可能需要阅读different types add-ons for Firefox WebExtensionsAdd-on SDKBootstrap/RestartlessOverlay/Legacy/XUL)。

WebExtensions:

至少,您将拥有一个描述扩展名的 manifest.json 文件。几乎可以肯定,您将拥有其他文件。 chrome.manifest install.rdf package.json 文件在其他类型的加载项中使用未使用< / em>在WebExtension附加组件中。你应该拥有这些文件。

附加SDK:

应该通过执行jpm xpi来创建Firefox附加SDK扩展的 .xpi 文件。附加SDK扩展在 package.json 文件中描述。当您运行jpm xpi时,您的加载项将转换为Bootstrap / Restartless附加组件。这是通过将 package.json 文件转换为 install.rdf ,创建 chrome.manifest 文件并向JavaScript添加一些包装器来完成的。 。你不应该自己尝试执行这个过程,除非你的附加功能需要这样做(这很少见)。

Bootstrap / Restartless和Overlay / legacy:

至少,您有install.rdfchrome.manifest个文件。 Bootstrap / Restartless附加组件还将具有 bootstrap.js 文件。几乎总会有其他文件。这些类型的加载项不使用 package.json ,也不使用 manifest.json

我非常简单的Bootstrap / Restartless扩展,Print Button is Print(更改打印按钮而不是打印预览),具有以下结构:

Archive contains:
  bootstrap.js
  chrome/
  chrome/content/
  chrome/content/options.xul
  chrome/skin/
  chrome/skin/printer-typeC128.png
  chrome/skin/printer-typeC32.png
  chrome/skin/printer-typeC48.png
  chrome/skin/printer-typeC64.png
  chrome.manifest
  install.rdf
  license.txt
Total 12 entries (42360 bytes)
  • 有必需的install.rdfchrome.manifest个文件。
  • bootstrap.js扩展名需要Bootstrap/Restartless个文件。它包含在安装,删除,启用,禁用扩展时或在Firefox启动或关闭时运行的代码。此扩展非常简单,所有JavaScript代码都包含在 bootstrap.js 中。
  • 有一个 chrome / content / options.xul 文件,它是options dialog的XUL定义。
  • license.txt 只是解释了该扩展程序已在Mozilla Public License, v2.0下重新发布。
  • .png文件是此扩展程序在各种分辨率下的图标。

创建 .xpi 文件

您可以使用您想要的任何方法来创建 .zip 文件,该文件已重命名为 .xpi 。请记住,支持的唯一压缩方法是&#34; deflate&#34;,但文件也可以添加到未压缩的存档中。您的顶级文件(例如,您拥有 manifest.json (WebExtensions)或其他所有文件: chrome.manifest install.rdf )应该在归档的根目录中,而不是在子目录中。

要创建.xpi文件,我使用批处理文件,它使用DOS和Unix / Linux(实际上是Cygwin)命令的组合:

mkxpi.bat

rm -f PrintButtonIsPrint@makyen.foo.xpi
zip -1 -r PrintButtonIsPrint@makyen.foo.xpi * -x@xpi.ignore
pause

这将删除.xpi文件的任何旧版本。然后,它使用.xpi创建一个新的-1文件,最小压缩(访问速度比保存空间更重要),这会强制只存储未压缩或使用&#34; deflate&#34;。新的 .xpi 将包含所有文件和子目录*,但忽略 xpi.ignore 文本文件(-x@xpi.ignore)中的所有文件。使用忽略文件是因为我在目录中有其他内容(例如.git目录,从编辑器自动创建的.bak文件等)。创建.xpi文件后,脚本会执行pause,这样我就可以验证包含哪些文件,没有错误等等,而不仅仅是让窗口消失并假设一切正常。

我的 xpi.ignore 文件有点长,因为它累积了来自各种项目并且很少清除:

*.com
*.class
*.dll
*.exe
*.o
*.so
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
*.log
*.sql
*.sqlite
*.svg
*/.DS_Store
*/.DS_Store?
*/._*
._*
*/.Spotlight-V100
.Spotlight-V100
*/.Trashes
.Trashes
*/ehthumbs.db
*/Thumbs.db
*.ORIG
*.bak
*OLD*
OLD/*
*/OLD/*
*.OLD
*.OLD[0-9]
*/OLD/*
*/OLD[0-9]/*
*.unknown
*.unknown[0-9]
*.updated
*.updated[0-9]
*/Copy *
*/OLD
*/OLD*
*/OLD[0-9]
*/OLD[0-9][0-9]
*/test/*
*/not in xpi/*
*/tmp
*.tmp
*/foo
*.foo
*checkpoint
.git
*/.git
.gitignore
*/.gitignore
xpi.ignore
mkclean.bat
mkclean.bat.DONTRUN
mkxpi.bat
*.xpi
*/devtools-toolbox-window.ico
*/devtools-webconsole.ico
*/JSConsoleWindow.ico
*/main-window.ico
*/places.ico
*/viewSource.ico

Installing extensions

作为正常扩展程序:
要将扩展程序作为普通加载项安装到Firefox的品牌版本或Beta版本中,它必须为signed by Mozilla。这是由submitting it to AMO完成的。您可以将未签名的扩展程序作为普通加载项安装到其他版本的Firefox中(例如Firefox Developer EditionFirefox NightlyUnbranded Beta, or Unbranded Release),方法是将xpinstall.signatures.required设置为false { {1}}。

如果您选择,在Firefox的特定安装中,您可以完全禁用加载项签名要求。有关详细信息,请参阅我的答案:How can I disable signature checking for Firefox add-ons?

Installing an extension(即about:config文件)可以简单地将其拖放到运行您希望安装的配置文件的Firefox窗口中。对于development/testing,您可以使用Firefox extension proxy file将扩展名放在本地驱动器的目录中(创建一个名为扩展名的文件.xpi(在中)在配置文件的 extensions 目录中的install.rdf for bootstrap / Restartless和Overlay / Legacy)包含一行,其中包含包含扩展名文件的目录的完整路径)。根据您的目标(一个配置文件,所有配置文件,所有用户,哪个操作系统等),还有其他选项如何install extensions

作为temporary add-ons
唯一不能作为临时加载项安装的扩展类型是Overlay / Legacy。此类扩展需要在安装之后重新启动浏览器才能正常运行。因此,它们不可能是暂时的。

要将扩展程序安装为临时扩展程序,请导航至<em:id>。在该页面上,单击Load Temporary Add-on,然后将弹出窗口导航到相应的文件夹,并选择 .xpi 文件或目录中的任何文件。如果选择 .xpi 文件以外的文件,则假定该目录包含将自动识别的解压缩附加文件。

答案 1 :(得分:2)

生成签名的.xpi

  1. 使用NPM安装web-ext,可能需要root权限:npm install --global web-ext
  2. 转到https://addons.mozilla.org/es/developers/addon/api/key/并生成新的API密钥。
  3. 转到您的扩展程序文件夹,打开终端并执行:web-ext sign --api-key=$AMO_JWT_ISSUER --api-secret=$AMO_JWT_SECRET其中$ AMO_JWT_IUSSER和$ AMO_JWT_SECRET是您在上一步中生成的密钥。