Firefox扩展.xpi文件结构:描述,内容,创建和安装 [英] Firefox extension .xpi file structure: description, contents, creation, and installation

查看:903
本文介绍了Firefox扩展.xpi文件结构:描述,内容,创建和安装的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

.xpi 文件格式 Extension Packaging



用作Mozilla(Firefox,Thunderbird等)扩展的容器的 .xpi 文件仅仅是文件扩展名变为 .xpi ,使用deflate压缩或未压缩将文件添加到压缩文件中。如果您使用任何其他类型的压缩,除deflate或store(未压缩)之外,您将收到如下错误:

 这个插件无法安装,因为它看起来是损坏的

这些文件从ZIP压缩档案的根目录开始(即不是空的第一级目录,然后包含这些文件)。

存档的内容可能只是几个文件到任意数量的文件。 必须包含的文件取决于您打包的加载项的类型。如果您打算使用附加SDK ,那么您可能不需要知道这些文件的格式,因为它使用 jpm 工具来抽象。如果您不知道我在说什么,则可能需要阅读 Firefox附加组件 WebExtensions 附加SDK Bootstrap / Restartless Overlay / Legacy / XUL )。

WebExtensions:



至少,您将拥有一个 manifest.json fi介绍扩展名的文件。你几乎肯定会有额外的文件。在其他类型的附件中使用的 chrome.manifest install.rdf package.json 文件未使用 / em>在WebExtension附加组件中。您应该 没有这些文件。



附加SDK:



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



Bootstrap / Restartless和Overlay / legacy:



至少要有 install.rdf chrome.manifest 文件。 Bootstrap / Restartless加载项也会有一个 bootstrap.js 文件。几乎总是会有额外的文件。这些类型的加载项不使用 package.json ,也不使用 manifest.json

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

 存档包含:
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
共有12个条目(42360个字节)




  • 需要 install.rdf chrome.manifest 文件。

  • 档案 bootstrap。 js Bootstrap / Restartless 扩展。它包含在扩展程序安装,删除,启用,禁用或Firefox启动或关闭时运行的代码。这个扩展很简单,所有的JavaScript代码都包含在 bootstrap.js 中。

  • 有一个文件 chrome / content / options.xul ,它是选项对话框

  • license.txt 只是解释了扩展是在 Mozilla Public License,v2.0

    创建 .xpi 文件



    您可以使用任何您希望创建 > .zip 文件,该文件被重命名为 .xpi 。请记住,唯一支持的压缩方法是放气,但文件也可以添加到未压缩的档案中。您的顶级文件(例如,您拥有 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 文件。然后使用 -1 创建一个新的 .xpi 文件,最小化压缩(访问速度比保存更重要空间),强制只存储未压缩或使用deflate。新的 .xpi 将包含所有文件和子目录 * ,但忽略 xpi.ignore 文件中的所有文件文件( -x@xpi.ignore )。忽略文件是因为我在目录中有其他的东西(例如 .git 目录, .bak 文件自动创建来自编辑等)。一旦创建了 .xpi 文件,脚本将执行 pause ,这样我就可以验证包含哪些文件,错误等,而不是只是让窗口消失,并假设一切正常。
    $ b

    My 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
    * / 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 / *
    * /不在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 完成的。您可以将未经签名的扩展程序作为普通加载项安装到其他版本的Firefox中(例如, Firefox开发人员版 Firefox Nightly xpinstall.signatures.required 到 false in about:config



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



    安装扩展程序 (即 .xpi 文件)可以简单地将其拖放到运行您希望安装的配置文件的Firefox窗口中。对于开发/测试,您可以将扩展名放在本地驱动器的目录中通过使用 Firefox扩展代理文件(创建一个名为作为扩展的< em:id> (在Bootstrap / Restartless和Overlay / Legacy的 install.rdf 目录包含一行,包含扩展名文件的目录的完整路径)。根据你的目标是什么(一个配置文件,所有配置文件,所有用户,哪个操作系统等),还有其他的选择,如何安装扩展
    $ b 作为临时加载项

    唯一可以扩展的类型不被安装为临时附加组件是Overlay / Legacy。这种扩展需要浏览器在安装之前重新启动,然后才能正常工作。



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


    I put a lot of stuff in searching an easy way to develop a Firefox extension, but I am unable to create an extension. Kindly tell me the file structure of Firefox extensions and an easy way to install the extension.

    解决方案

    .xpi file format (Extension Packaging)

    The .xpi files that are used as containers for Mozilla (Firefox, Thunderbird, etc.) extensions are merely zip archives that have had the file extension changed to .xpi with the files added to the archive using either "deflate" compression, or uncompressed. If you use any other type of compression, other than "deflate", or "store" (uncompressed), you will get an error like:

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

    The files start in the root directory of the zip compressed archive (i.e. there is not an empty first level directory which then contains the files).

    The contents of the archive could be only a few files to any number of files. The files that must be included depend on the type of add-on which you are packaging. If you are planning on using the Add-on SDK, then you probably don't need to know the format for these files, as much of it is abstracted by using the jpm tool. If you have no idea what I am talking about, you may want to read up on the different types of add-ons for Firefox (WebExtensions, Add-on SDK, Bootstrap/Restartless, and Overlay/Legacy/XUL).

    WebExtensions:

    At a minimum, you will have a manifest.json file which describes the extension. You will, almost certainly, have additional files. The chrome.manifest, install.rdf, and package.json files used in other types of add-ons are not used in WebExtension add-ons. You should not have those files.

    Add-on SDK:

    The .xpi file for a Firefox Add-on SDK extension should be created by executing jpm xpi. Add-on SDK extensions are described in a package.json file. When you run jpm xpi your add-on is translated to being a Bootstrap/Restartless add-on. This is done by translating the package.json file into a install.rdf, creating a chrome.manifest file and adding some wrappers to the JavaScript. You should not try to perform this process yourself, unless doing so is necessary for your add-on to function (which would be quite rare).

    Bootstrap/Restartless and Overlay/legacy:

    At a minimum, you have install.rdf, and chrome.manifest files. Bootstrap/Restartless add-ons will also have a bootstrap.js file. There will almost always be additional files. These types of add-ons do not use a package.json, nor a manifest.json.

    My very simple Bootstrap/Restartless extension, Print Button is Print (changes the print button to print instead of print preview), has the following structure:

    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)
    

    • There are the required install.rdf and chrome.manifest files.
    • The file bootstrap.js is required for Bootstrap/Restartless extensions. It contains the code that is run when the extension is installed, removed, enabled, disabled, or upon Firefox startup or shutdown. This extension is simple enough such that all the JavaScript code is contained in bootstrap.js.
    • There is a file chrome/content/options.xul which is a XUL definition of the options dialog.
    • The license.txt just explains that the extension was relased under the Mozilla Public License, v2.0.
    • The .png files are the icon for this extension at various resolutions.

    Creating the .xpi file

    You can use whatever method you desire to create the .zip file, which is renamed to .xpi. Keep in mind the requirement that the only compression method that is supported is "deflate", but files can also be added to the archive uncompressed. Your top level files (e.g. which ever you have of manifest.json (WebExtensions), or everything else: chrome.manifest, and install.rdf) should be in the root directory of the archive, not in a subdirectory.

    To create the .xpi file I use a batch file, which uses a combination of DOS and Unix/Linux (actually Cygwin) commands:

    mkxpi.bat:

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

    This removes any old version of the .xpi file. It then creates a new .xpi file using, -1, minimal compression (speed of access is more important than saving space), which forces only storing uncompressed or using "deflate". The new .xpi will contain all files and subdirectories *, but ignoring all the files in the xpi.ignore text file (-x@xpi.ignore). Ignoring files is used because I have other things in the directory (e.g. .git directory, .bak files auto-created from editor, etc.). Once the .xpi file is created the script executes pause so I can verify which files were included, that there were no errors, etc., instead of just having the window disappear and assuming that everything is fine.

    My xpi.ignore file is a bit long, as it accumulates cruft from various projects and is rarely cleaned out:

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

    As normal extensions:
    In order to install an extension as a normal add-on into a branded Release or Beta version of Firefox it must be signed by Mozilla. This is done by submitting it to AMO. You can install unsigned extensions as normal add-ons into other versions of Firefox (e.g. Firefox Developer Edition, Firefox Nightly, Unbranded Beta, or Unbranded Release) by setting xpinstall.signatures.required to false in about:config.

    If you choose, in a particular installation of Firefox, you can completely disable the add-on signing requirement. For more information, you can see my answer: How can I disable signature checking for Firefox add-ons?

    Installing an extension (i.e. the .xpi file) can be a simple matter of dragging and dropping it onto a Firefox window running the profile in which you desire it installed. For development/testing, you can have the extension be in a directory on your local drive by using a Firefox extension proxy file (create a file named as the extension's <em:id> (in install.rdf for Bootstrap/Restartless and Overlay/Legacy) in the profile's extensions directory containing one line with the complete path to the directory containing the extension's files). Depending on what your goal is (one profile, all profiles, all users, which OS, etc.), there are other options as to how to install extensions.

    As temporary add-ons:
    The only type of extension which can not be installed as a temporary add-on is Overlay/Legacy. Such extensions require the browser to be restarted after the install prior to being functional. As such, they can not be temporary.

    To install an extension as a temporary, navigate to about:debugging. From that page, click on Load Temporary Add-on, then navigate popup to the appropriate folder and select either an .xpi file, or any file in the directory. If you select a file other than an .xpi file, it is assumed that the directory contains unpacked add-on files which will be automatically identified.

    这篇关于Firefox扩展.xpi文件结构:描述,内容,创建和安装的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆