I have my own browser extension with some personal website customizations. Works fine in Chrome, but doesn't work in Firefox.
Unlike Chrome, it seems Firefox can't install unpacked extensions or add-ons. Only in debug mode I can do Load Temporary Add-on
, select the folder with my extension, and that works OK. Except that's just temporary.
When I pack the extension by putting the files in a .zip (not within a subdirectory or anything, the archive just directly contains the files) and rename it to .xpi, and then choose Install Add-on from file
and select my .xpi, it says:
The add-on downloaded from this site could not be installed because it appears to be corrupt.
While troubleshooting, I made a minimal dummy extension which doesn't do anything, consisting only of a manifest.json
and dummy.js
file. Then pack that from the command line using 7z a -tzip test.xpi
in that directory, which creates my zip file called test.xpi
containing the two files. Loading that extension in Firefox give the error above.
For your reference here is my manifest.json:
{
"manifest_version": 2,
"name": "Test Extension",
"version": "1.0",
"description": "Dummy Text Extension",
"content_scripts": [
{
"matches": [ "*://*/" ],
"js": ["dummy.js"]
}
]
}
And the content of dummy.js is:
// this file is intentionally left blank
Again: works fine in Chrome, works fine in Firefox when loading as temporary add-on in debug mode (i.e. by loading the files, in the open dialog I select the manifest.json file). But loading the .xpi to install this extension permanently results in the "appears to be corrupt" error.
FYI: I'm using the latest versions of Chrome and Firefox on macOS 10.15.5.
For testing purposes, here is the exact test.xpi file I created, but packing it manually as decribed above will give the same result.
Ran into the exact same problem the other day..
To get my personal xpi to install permanently (under Firefox for Linux 77.0.1):
had to disable extension signing about:config
, xpinstall.signatures.required = false
(unfortunatelly this will need to stay, because signatures seems to be verified on every browser start)
add an explicit id to browser_specific_settings section in the manifest
For example:
"browser_specific_settings": {
"gecko": {
"id": "blahblah@blah"
}
}
Hope this helps!