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

我花了很多东西来search一个简单的方法来开发一个Firefox扩展,但我无法创build一个扩展。 请告诉我Firefox扩展的文件结构和安装扩展的简单方法。

.xpi文件格式 ( Extension Packaging )

用作Mozilla(Firefox,Thunderbird等)扩展的容器的.xpi文件仅仅是zip文件,其文件扩展名已经改为.xpi ,文件使用“deflate”压缩或未压缩。 如果您使用除“deflate”或“store”(未压缩)以外的任何其他types的压缩,将会出现如下错误:

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

这些文件从zip压缩归档的根目录开始(即没有空的第一级目录,然后包含这些文件)。

档案的内容可能只有几个文件到任何数量的文件。 必须包含的文件取决于您打包的加载项的types。 如果您打算使用附加SDK ,那么您可能不需要知道这些文件的格式,因为使用jpm工具可以抽象出这些文件的格式。 如果您不知道我在说什么,可能需要阅读Firefox的不同types的附件 ( WebExtensions , Add-on SDK , Bootstrap / Restartless和Overlay / Legacy / XUL )。

WebExtensions:

至less,您将拥有一个描述扩展名的manifest.json文件。 你几乎肯定会有额外的文件。 WebExtension附加组件中不使用 chrome.manifestinstall.rdf和其他types附加组件中使用的 package.json文件。 你不应该有这些文件。

附加SDK:

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

Bootstrap / Restartless和Overlay / legacy:

至less,你有install.rdfchrome.manifest文件。 Bootstrap / Restartless加载项也会有一个bootstrap.js文件。 几乎总是会有额外的文件。 这些types的加载项不使用package.json ,也不使用manifest.json

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

 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 / Restartless扩展需要bootstrap.js文件。 它包含在扩展程序安装,删除,启用,禁用或Firefox启动或closures时运行的代码。 这个扩展很简单,所有的JavaScript代码都包含在bootstrap.js中
  • 有一个文件chrome / content / options.xul ,它是选项对话框的XUL定义。
  • license.txt只是解释说,扩展是在Mozilla公共许可证,2.0版 。
  • .png文件是各种分辨率的扩展名的图标。

创build.xpi文件

您可以使用任何您想要创build.zip文件的方法,将其重命名为.xpi 。 请记住,唯一支持的压缩方法是“放气”,但文件也可以添加到未压缩的档案中。 您的顶级文件(例如manifest.json (WebExtensions)或其他所有文件( chrome.manifestinstall.rdf ))应位于归档的根目录中,而不是在子目录中。

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

mkxpi.bat

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

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

我的xpi.ignore文件有点长,因为它累积了来自各个项目的信息,很less被清理掉:

 *.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 

安装扩展

作为正常的扩展:
为了将扩展程序作为普通插件安装到Firefox的品牌版本或Beta版本中,必须由Mozilla签名 。 这是通过提交给AMO完成的 。 您可以通过在about:config xpinstall.signatures.required设置为false ,将未签名的扩展安装为其他Firefox版本(例如Firefox开发人员版 , Firefox Nightly , Unbranded Beta或Unbranded Release )的xpinstall.signatures.required

如果您select,在Firefox的特定安装中,您可以完全禁用附加签名要求。 有关更多信息,请参阅我的答案: 如何禁用Firefox附加组件的签名检查?

安装扩展 (即.xpi文件)可以简单地将其拖放到运行您希望安装的configuration文件的Firefox窗口上。 对于开发/testing ,您可以使用Firefox扩展代理文件 (扩展名为<em:id> (在install.rdf中为Bootstrap / Restartless和Overlay /旧版)在configuration文件的扩展目录中包含一行,包含扩展名文件的目录的完整path)。 根据您的目标是什么(一个configuration文件,所有configuration文件,所有用户,哪个操作系统等),还有其他选项来安装扩展 。

作为临时插件 :
无法作为临时附件安装的唯一扩展types是Overlay / Legacy。 这种扩展需要浏览器在安装之前重新启动,然后才能正常工作。 因此,他们不能是暂时的。

要将扩展安装为临时,请导航到about:debugging 。 在该页面上,单击加载临时加载项,然后导航到适当的文件夹并select.xpi文件或目录中的任何文件。 如果您select的文件不是.xpi文件,则假定该目录包含将自动识别的解包的附加文件。

生成一个签名的.xpi

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