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

3

我花了很多时间寻找一种简单的方法来开发Firefox扩展程序,但是我仍然无法创建扩展程序。请告诉我Firefox扩展程序的文件结构以及安装扩展程序的简单方法。


实际上,我需要将一些 JavaScript 注入到特定的网站上。我已经创建了一个 Chrome 扩展程序,只需要两个主要文件(manifest.json 和 background.js),通过使用这些文件,我能够将 background.js 脚本注入到我的网站中。现在我正在寻找在 Firefox 中实现类似注入的方法。谢谢。 - undefined
我仍然不明白如何制作.xpi文件以上传扩展程序。请您详细说明制作.xpi文件的过程,以及所需的文件和结构。感谢您的合作。 - undefined
1
可能是重复的问题:开发Firefox扩展的最简单方法是什么? - undefined
@roushankumarSingh 加入IRC,我可以带你一步步了解。我在extdev频道上,这是Mibbit链接:https://client00.chat.mibbit.com/?url=irc%3A%2F%2Firc.mozilla.org%2F%extdev 我在那里的名字是noida。 - undefined
但这是一个Bootstrap插件的基本结构,其中包括它的.xpi文件:https://gist.github.com/Noitidart/9025999,而gist上的评论就像一个自述文件,非常有用。 - undefined
显示剩余2条评论
2个回答

7

.xpi文件格式 (扩展打包)

.xpi文件被用作Mozilla(Firefox,Thunderbird等)扩展的容器,它们实际上是zip归档文件,只是将文件扩展名更改为.xpi并使用“deflate”压缩或未压缩来添加文件到归档中。如果您使用除“deflate”或“store”(未压缩)之外的任何其他类型的压缩,则会出现错误,例如:

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

这些文件直接位于压缩包的根目录下(即没有一个空的第一级目录来包含这些文件)。

归档文件的内容可以是几个文件到任意数量的文件。必须包含的文件取决于您要打包的插件类型。如果您计划使用Add-on SDK,则可能不需要了解这些文件的格式,因为使用jpm工具抽象了其中的大部分内容。如果您不知道我在说什么,您可能需要阅读有关不同类型Firefox附加组件WebExtensions, Add-on SDK, Bootstrap/Restartless, and Overlay/Legacy/XUL)。

WebExtensions:

最基本的,你需要一个描述扩展的manifest.json文件。你几乎肯定还会有其他的文件。在其他类型的附加组件中使用的chrome.manifestinstall.rdfpackage.json文件,在WebExtension附加组件中是不使用的。你不应该有那些文件。

Add-on SDK:

一个Firefox Add-on SDK扩展的.xpi文件应该通过执行jpm xpi来创建。Add-on SDK扩展在package.json文件中描述。当你运行jpm xpi时,你的插件被翻译成为Bootstrap/Restartless插件。这是通过将package.json文件翻译成install.rdf,创建chrome.manifest文件并向JavaScript添加一些包装器来完成的。除非这样做对你的插件功能必不可少(这种情况相当罕见),否则你不应该尝试自行执行此过程。

Bootstrap/Restartless和Overlay/legacy:

至少需要有 install.rdfchrome.manifest 文件。引导式/无需重启的插件还会有一个 bootstrap.js 文件。通常还会有其他文件。这些类型的插件不使用 package.jsonmanifest.json
我的非常简单的引导式/无需重启的扩展程序 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/Restartless 扩展需要文件 bootstrap.js。它包含了扩展安装、卸载、启用、禁用或 Firefox 启动或关闭时运行的代码。该扩展非常简单,因此所有 JavaScript 代码都包含在 bootstrap.js 中。
  • 有一个文件 chrome/content/options.xul,它是 选项对话框 的 XUL 定义。
  • license.txt 只是说明该扩展是根据 Mozilla Public License, v2.0 发布的。
  • .png 文件是该扩展在各种分辨率下的图标。

创建.xpi文件

您可以使用任何方法来创建.zip文件,然后将其重命名为.xpi。请注意,仅支持“deflate”压缩方法,但也可以将文件添加到未压缩的存档中。您的顶级文件(例如,manifest.json(WebExtensions)或其他所有文件:chrome.manifestinstall.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文件。然后使用-1进行最小化压缩(访问速度比节省空间更重要),强制只存储未压缩或使用“deflate”的文件来创建一个新的.xpi文件。新的.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

安装扩展

作为普通扩展:
要将扩展作为普通附加组件安装到 Firefox 的品牌版或 Beta 版中,必须由 Mozilla 进行签名。这通过提交至 AMO完成。您可以通过在about:config中将 xpinstall.signatures.required 设置为 false,将未签名的扩展作为普通附加组件安装到其他版本的 Firefox(例如 Firefox Developer EditionFirefox NightlyUnbranded Beta 或 Unbranded Release)中。

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

安装扩展程序(即.xpi文件)可以简单地将其拖放到运行所需安装的Firefox配置文件窗口中。对于开发/测试,您可以使用Firefox扩展代理文件将扩展程序放在本地驱动器上的目录中(在Bootstrap/Restartless和Overlay/Legacy的install.rdf中以<em:id>命名的文件中,将该文件放在配置文件的extensions目录中,其中包含一行完整路径,指向包含扩展程序文件的目录)。根据您的目标(一个配置文件、所有配置文件、所有用户、哪个操作系统等),还有其他选项可供安装扩展程序

作为临时添加组件:
唯一不能作为临时添加组件安装的类型是覆盖/传统扩展。这些扩展需要在安装后重启浏览器才能正常运行。因此,它们不能是临时的。

要将扩展作为临时安装,请导航到about:debugging。从该页面,点击“加载临时添加组件”,然后导航弹出窗口到适当的文件夹,并选择一个.xpi文件或目录中的任何文件。如果您选择的是一个除.xpi文件之外的文件,则假定该目录包含未打包的附加组件文件,这些文件将被自动识别。


这个答案现在已经过时了,包含了失效的链接。https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/#Automatic_extension_reloading - undefined

4

生成已签名的.xpi文件

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接