将 Firefox 附加组件上传到 AMO 时缺少 manifest.json

Missing manifest.json when uploading Firefox Add-on to AMO

我无法使用 form provided by mozilla 上传我的 firefox 扩展。我不断收到错误 Your add-on failed validation with 2 errors. No install.rdf or manifest.json foundAdd-on missing manifest,这是非常具有误导性的,因为我的应用程序 一个 manifest.json.

manifest.json 看起来像这样:

{
"manifest_version": 2,
"version": 1.0,
"name": "my-extension-name",
"description": "Lorem ipsum dolor sit amet",
"background": {
   "scripts": ["js/background.js"]
},
"main": "popup.js",
"browser_action": {
  "default_icon": "img/icon_grey.png",
  "default_popup": "popup.html",
  "default_title": "loremipsum"
},
"engines": {
  "firefox": ">=38.0a1"
},
"permissions": [
  "activeTab",
  "tabs",
  "background",
  "http://*/*",
  "https://*/*",
  "notifications",
  "alarms",
  "storage",
  "webRequest",
  "webRequestBlocking",
  "clipboardRead"
]
}

这个方法缺少什么?

当您打开插件包 zip 文件时,您应该可以看到 manifest.json 文件以便将其上传到 AMO。

在您的情况下,当您打开压缩包时,似乎有一个文件夹,manifest.json 位于该文件夹内。

因为我找到了解决我的问题的方法并想分享它以供将来参考,所以我回答我自己的问题:

手头的问题是我没有使用 web-ext 命令行工具来创建 .zip / .xpi 包。我能够通过安装 web-ext 并使用 web-ext build 构建扩展来解决问题。此操作的结果是一个 .xpi 文件,其中包含我随后能够上传到 AMO 服务的项目。请注意,新创建的包中的 manifest.json 与我最初提供的 manifest.json 相同。但是,除了 manifest.json 之外,还创建了一个目录 META-INF,其中包含 mozilla.mfmozilla.rsamozilla.sf 文件。

然而,这并没有完全解决我的问题。把扩展上传到AMO后,安装不了,说是损坏了。显然,这是我在 interwebz 的某个地方读到的(忘记了来源),Mozilla 打开了上传的 .zip / .xpi 包来测试它,由于我的包没有签名,Mozilla 无法确保它的完整性并标记它不安全(即损坏)。

为了解决第二个问题,我不得不签署延期。这可以使用以下命令完成:

web-ext sign --api-secret YOUR_API_SECTER --api-key YOUR_API_KEY

在此之后,我能够上传并安装扩展。

我 运行 遇到了同样的问题,但所有这些说明都没有解决它。 我一直做的是打包整个文件夹,因此 manifest.json 在解压时不在第一层。

我的解决方案

Select 所有文件,而不是文件夹,然后将它们打包为一个 .zip 文件,它应该可以工作。至少它对我有用。

这里是link到MDN Documentation

遇到同样的问题,问题是文件名区分大小写:

Manifest.jason -> 错误,未找到清单 manifest.json -> 成功

对此的非常简单的回答是无法在您的 zip 文件中找到清单。这是因为当您获取文件并使用 windows 中的默认压缩器将其压缩时,它会获取文件并将其放入您创建的 zip 文件的子文件夹中...

压缩前

folderYouWantCompressed -FileInFolder.html -Manifest.json

压缩后是这样

nameOfZip.zip -folderYouWantCompressed -FileInFolder.html -Manifest.json

但你想要的是

nameOfZip.zip -FileInFolder.html -Manifest.json

Oliver Sauter 回答有效的原因是因为当你 select "folderYouWantCompressed" 中的所有文件时,它压缩时没有子文件夹,这意味着你不会 运行 进入这个问题并且它有找到清单文件没问题。

据我所知,"correct answer" 似乎正在对附加组件本身进行签名,并且能够正确获取清单文件,因此它确实有效,但似乎只是第 3 方的方式(我没看得太深)

注意:我最初是通过查看 Oliver Sauter 解决了我的问题 post 我只是想让未来的人看清楚这个 post。