我想将我的firefox扩展名打包为xpi文件。我尝试将其添加到存档并将其命名为filename.xpi
但是当我尝试在firefox上安装它时,#34;包已损坏"信息。有什么办法可以创建一个有效的xpi文件吗?
我已安装cygwin并尝试执行zip命令来创建xpi文件。但得到zip不是命令错误。
有人可以指导我完成它吗?
答案 0 :(得分:24)
如果你在Windows上(安装cygwin就像你一样),你可以使用内置工具的窗口:
然后在文件名
中替换.zip .xpi看起来您的问题在于正确完成第1点。仅选择扩展名的内容。不是包含它的文件夹。
所以基本上你的zip文件应该有以下结构:
my_extension.zip
|- install.rdf
|- chrome.manifest
|- <chrome>
而不是这个结构:
my_extension.zip
|- <my_extension>
|- install.rdf
|- chrome.manifest
|- <chrome>
答案 1 :(得分:4)
我今天遇到了同样的问题,发现错误是该插件显然没有被Mozilla签名,导致Firefox拒绝安装。直到最近,通过在xpinstall.signatures.required
中将about:config
设置为false,可以绕过此安全检查。但是,从Firefox 46开始,签名是强制性的,不再提供旁路,请参阅https://blog.mozilla.org/addons/2016/01/22/add-on-signing-update/这意味着必须降级到以前的版本或使用非发布渠道版本来测试一个&#39 ; s插件:(
答案 2 :(得分:2)
此外,以下是我使用命令行 7z 打包Firefox的扩展程序:
cd /the/extension/folder/
7z a ../<extension_name>.xpi * -r
(其中'a'代表“add / create”和“-r”代表递归)
或者使用我们刚刚编辑的文件更新扩展程序:
cd /the/extension/folder/
7z u ../<extension_name>.xpi * -r
(“u”用于更新档案的内容)
答案 3 :(得分:2)
两种方法,使用GUI 7zFM.exe,或命令行或批处理文件。
1.0) GUI方法。假设7-Zip安装了shell集成,因此您可以在Windows资源管理器的上下文菜单(右键单击所选文件)中看到7-Zip。
1.a)进入附加组件的文件夹。
1.b)选择要包含在.xpi中的所有文件和文件夹。假设您没有任何文件要在任何子文件夹中忽略。如果这样做,您可能需要使用命令行选项。
1.c)右键单击所选文件列表,找到7z
图标,选择Add to archive...
选项。
1.d)弹出一个对话框。编辑zip文件的位置和名称,更改为.zip到.xpi等。
1.e)请注意,如果您在同一文件夹中创建.xpi,请不要再将其重新存档,因为您的加载项会失败。你永远不会想要.xpi在.xpi内意外结束。我通常只是在父文件夹中创建它,方法是将..\
添加到文件名的开头,例如..\addon-1.2.3-fx.xpi
1.f)7-Zip有许多强大的压缩选项,并非所有Firefox都可以处理。选择Firefox能够处理的设置。参考图片。
2.0)命令行方法。假设您在Windows中,并且知道如何打开命令提示符,请更改驱动器和目录(a.k.a。文件夹)。
2.a)CD
到您的附加目录。
2.b)使用最基本的7-Zip命令行。
"C:\Program Files\7-Zip\7z.exe" a -tzip addon-1.2.3-fx.xpi *
2.c)您可以通过查找与上述GUI对应的确切命令行选项来获取较小的文件,即:
"C:\Program Files\7-Zip\7z.exe" a -tzip -mx=9 -mm=Deflate -mfb=258 -mmt=8 "addon-1.2.3-fx.xpi" *
请注意,使用Deflate Compression方法时没有Dictionary size = 32kb选项。否则,选项按顺序排列,并与GUI对应。
|-----------------------|---------|--------------|
| Option / Parameter | GUI | Command line |
|-----------------------|---------|--------------|
| Archive format | zip | -tzip |
| Compression level | Ultra | -mx=9 |
| Compression method | Deflate | -mm=Deflate |
| Dictionary size | 32 KB | (none) |
| Word size | 258 | -mfb=258 |
| Number of CPU threads | 8 | -mmt=8 |
|-----------------------|---------|--------------|
| Additional Parameters | | |
|-----------------------|---------|--------------|
| Recurse into Folders | (none) | -r |
| Multiple passes | (none) | -mpass=15 |
| Preserve Timestamps | (none) | -mtc=on |
| Ignore files in list | | -x@{ignore} |
|-----------------------|---------|--------------|
注意:
i)多线程选项(-mmt = 8)特定于我的系统,它有8个核心。如果您拥有较少的内核等,则需要将此值降低到6或4或2或1(即删除选项),如果有更多内核,则需要增加。对于小型扩展,两种方式都没有多大区别。
ii)递归到文件夹的选项可能是也可能不是默认选项,因此指定此选项应确保正确的递归。
iii)preserve windows timestamps
(创建,访问,修改)的选项默认为on
,因此可能不需要。
iv)ignore files in list
选项是包含您要排除的文件和通配符列表的任何文件。
2.d)高级主题#1 :忽略文件列表(示例)
|----------------|------------------------------------|
| What to Ignore | Why to Ignore |
|----------------|------------------------------------|
| TODO.txt | Informal reminders of code to fix. |
| *.xpi | In case you forget warning above! |
| .ignore | Ignore the ignore file list. |
| ignore.txt | Same thing, if you used this name. |
|----------------|------------------------------------|
"C:\Program Files\7-Zip\7z.exe" a -tzip -mx9 -mm=Deflate -mfb=258 -mmt=8 -mpass=15 -mtc=on "addon-1.2.3-fx.xpi" * -x@ignore.txt
2.e)高级主题#2 :批处理文件(Windows CMD.EXE),假设最近的窗口,即21世纪。这可以像你想要的那样简单,严格,或复杂而灵活。一般的平衡是假设您将在Command Prompt
中,在您正在处理的加载项的顶级目录中,并且您已智能地将该目录命名为具有.xpi文件的相同基本名称例如D:\dev\addon-1.2.3-fx
附加xpi的addon-1.2.3-fx.xpi
目录。此批处理文件进行此假设,并动态计算出用于.xpi的正确基本名称。
@ECHO OFF
REM - xpi.bat - batch file to create Mozilla add-on xpi using 7-Zip
REM - This finds the folder name, and discards the rest of the full path, saves in an environment variable.
FOR %%* IN (.) DO SET XPI=%%~nx*
REM - Uncomment the DEL line, or delete .xpi file manually, if it gets corrupted or includes some other junk by accident.
REM DEL "%XPI%.xpi"
REM - Command line which does everything the GUI does, but also lets you run several passes for the smallest .xpi possible.
"C:\Program Files\7-Zip\7z.exe" a -tzip -r -mx=9 -mm=Deflate -mfb=258 -mmt=8 -mpass=15 -mtc=on "%XPI%.xpi" * -x@ignore.txt
REM - Cleanup the environment variable.
SET XPI=
答案 4 :(得分:1)
当使用7z打包扩展时,压缩成.zip然后重命名为.xpi,不要压缩我
答案 5 :(得分:1)
使用7z时,请执行以下操作 仅选择内部内容而不选择外部文件夹。 输入文件名为 filename.xpi ,并在压缩时出现的提示中选择存档格式为 zip 。 您将找到创建的有效xpi文件。 使用创建的xpi在firefox上安装扩展。 它有效!
答案 6 :(得分:0)
只需压缩my_extension文件夹中的所有文件和文件夹,然后将生成的压缩文件的扩展名更改为my_extension.xpi
/my_extension
|- defaults/
|- locale/
|- resources/
|- install.rdf
|- ... (other files and folders)
安装从my_extension文件夹的压缩文件创建的xpi文件将导致错误为
“无法安装此附加组件,因为它似乎已损坏。”错误
答案 7 :(得分:0)
我尝试以多种方式构建zip,因为我确信自己做错了,因为我得到的只是“包装损坏”的东西。 好吧。不再,我什至不需要从“加载临时附加组件”中加载它(现在我将xpi文件从桌面上拖放到Waterfox上,并作为合法的xpi文件安装! 我该怎么做? “因为我尝试了自己的github东西,所以我首先使用user314159所使用的方法以及使用7zip的.bat文件方法来在加载临时附件(url:about:debugging#addons)xpi文件中进行加载。
加载后,您应该阅读类似于以下内容的内容:
扩展名ID 86257e65ca311ee368ffcee50598ce25733a049b @ temporary-addon
然后您要做的就是在manifest.json中添加修改“应用程序”的内容:
"applications": {
"gecko": {
"strict_min_version": "54.0a1",
"id": "86257e65ca311ee368ffcee50598ce25733a049b@temporary-addon"
}
},
在按下 Remove (卸载)以卸载临时加载项之后,您应该像以前一样再次构建xpi 现在是一个普通的xpi文件签名,可以正常安装了! (这里的作品无需修改其他内容)
我使用Waterfox x64,似乎是Firefox的问题
答案是,您应该将扩展程序上传到集线器上,然后才能使用Mozilla签名API https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/Distribution
答案 8 :(得分:0)
config.js
config.js
//
try {
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
.eval("SIGNED_TYPES.clear()");
}
catch(ex) {}
将config.js
移动到应用程序工作文件夹,例如:C:\Program Files\Mozilla Firefox\
创建config-prefs.js
并将代码写入:
pref("general.config.obscure_value", 0);
pref("general.config.filename", "config.js");
将config-pres.js
放置到C:\Program Files\Mozilla Firefox\defaults\pref\
重新启动Firefox
查看结果