【问题标题】:How do I install WebExtension that developed by myself to Firefox Nightly?如何将自己开发的 WebExtension 安装到 Firefox Nightly?
【发布时间】:2017-11-16 04:21:52
【问题描述】:

我已经知道临时安装插件以进行调试的方法。 但是,我想永久安装它。我不想把它上传到 AMO,因为我开发它仅供我自己使用。

如何在 Firefox Nightly 上安装它?

浏览器:Firefox Nightly 56a1
操作系统:macOS 10.12.5

编辑

我在引用 Getting started with firefox-addon 时尝试了 Andrew 的方式,但出现错误 (This add-on could not be installed because it appears to be corrupt.),尽管临时安装成功。
为什么只有从Install Add-on from File...安装时安装失败?

源代码在这里 https://github.com/KiYugadgeter/webext

编辑2:

以下是浏览器控制台上的错误消息。

1497764354857   addons.xpi  WARN    Invalid XPI: Error: Cannot find id for 

addon /
Users/username/jsworks/webextensions/stacknotifier/something.xpi (resource://gre/modules/addons/XPIInstall.jsm:1642:17) JS Stack trace: loadManifest@XPIInstall.jsm:1642:17 <
async*init@XPIInstall.jsm:2122:13 < async*createLocalInstall@XPIProvider.jsm:4820:12 < getInstallForFile@XPIProvider.jsm:3437:5 < callProviderAsync@AddonManager.jsm:297:12 <
promiseCallProvider/<@AddonManager.jsm:321:53 < Promise@Promise-backend.js:390:5 <
promiseCallProvider@AddonManager.jsm:320:10 < getInstallForFile/<@AddonManager.jsm:1856:29
< async*getInstallForFile@AddonManager.jsm:1854:13 < getInstallForFile@AddonManager.jsm:
3560:7 < doCommand/<@extensions.js:1472:13

[Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIURI.hostPort]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: resource://gre/modules/PopupNotifications.jsm :: PopupNotifications_refreshPanel/< :: line 806"  data: no]

【问题讨论】:

标签: firefox installation firefox-addon-webextensions


【解决方案1】:

最新版本的 Firefox 要求您在永久安装扩展程序之前对其进行签名。要使您的扩展程序签名,您不必发布它。您只需要一个名为web-ext 的工具。然后你可以简单地从你的终端运行它:

web-ext sign --api-key=$AMO_JWT_ISSUER --api-secret=$AMO_JWT_SECRET

Web-ext 入门:
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext

web-ext sign:
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/web-ext_command_reference#web-ext_sign

获取您的 AMO_JWT_ISSUER 和 AMO_JWT_SECRET:
https://addons.mozilla.org/en-US/developers/addon/api/key/

简而言之:

  • Downlaod and Install NodeJS
  • 打开一个新终端并运行npm install --global web-ext
  • 转到api key site 并获取您的 AMO_JWT_ISSUER 和 AMO_JWT_SECRET
  • 打开一个新终端,进入包含扩展源的文件夹并运行

    web-ext sign --api-key=xxxx:xxxxxxx:xxx --api-secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    

【讨论】:

    【解决方案2】:

    既然你说你使用的是 Nightly,你也可以去 about:config,找到首选项“xpinstall.signatures.required”并将其翻转为 false。然后您应该能够从 about:addons -> "Install Add-on from File..." 安装您的扩展程序

    【讨论】:

    • 这个方法我试过了,虽然临时安装成功,但还是报错(This add-on could not be installed because it appears to be corrupt.)。
    • 您是使用 web-ext 还是手动生成 xpi?浏览器控制台(不是常规的 Web 控制台)中是否有任何内容?
    • @KiYugadgeter 如果您从about:debugging 安装它,它甚至可以工作吗?对我来说,这听起来像是您的插件实际上已损坏。
    • 我的扩展从 about:debugging 安装时可以工作。 (about:debugging 仅用于临时安装)
    【解决方案3】:

    您的错误是:Invalid XPI: Error: Cannot find id for addon

    引用 WebExtension documentation:

    什么时候需要插件 ID?

    • 如果您从其 XPI 文件加载加载项,则暂时不要使用 about:debugging 加载它,并且它未签名。
    • ...

    这是你的情况;因此,您需要在清单中填写applications.gecko.id key。这与setting key key in Chrome 的作用相似(在Chrome 中,打包扩展的ID 是key 字段的哈希)。

    或者(可能最好),您可以按照Forivin's answer 的指示对您的XPI 进行签名,因为加载未签名的WebExtensions 只能在Nightly 中进行。这需要与 AMO 进行交互 - 但不需要在那里托管。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-18
      • 1970-01-01
      相关资源
      最近更新 更多