firefox 插件从引导到 webextension 的过渡不起作用

Transition of firefox addon from bootstrapped to webextension not working

我正在尝试从引导插件过渡到网络扩展插件。为此,我想从一个中间版本开始,它是一个带有嵌入式 webextension 的自举扩展;这尤其应该将个人设置从旧式首选项复制到新式本地存储。

我想我遵循了我找到的说明:

根据我在文档中的内容,startup(data,reason) 的第一个参数应该增加 webextension 属性。然而,情况似乎并非如此:我的转储仅显示 idversioninstallPathresourceURIinstanceID,因此我无法执行以上第三点。 我可能做错了什么?

编辑: 精简为最小示例,minimal.xpi,包含

预期行为: "A"、"B" 和 "C" 出现在控制台日志中(其中 "B" 可能出现在"C"之后,因为承诺的异步性质)

实际行为: "A" 出现在日志中,但后面跟着

addons.xpi  WARN    Exception running bootstrap method startup on
 minimalexample@example: TypeError: webextension is undefined
 (resource://gre/modules/addons/XPIProvider.jsm -> 
 jar:file:///home/obscured/minimal.xpi!/bootstrap.js:4:5) 
 JS Stack trace: startup@bootstrap.js:4:5 <
 this.XPIProvider.callBootstrapMethod@XPIProvider.jsm:4800:9 <
 this.XPIProvider.installTemporaryAddon<@XPIProvider.jsm:3993:5

一切都很好,没有真正的问题,或者至少在 non-debugging 环境中不会有:

首先,应该注意的是 webextensions 自 FireFox 45 版以来就已经存在。但是,直到最近,从旧插件过渡到 webextension 一直很困难添加在。即,具有 嵌入式 webextensions 的旧版插件的过渡插件仅适用于 FireFox 51 版本。 因此,在编写带有嵌入式 webextensions 的插件时,应该注意过渡插件的 install.rdf 中至少有 <em:minimalVersion>51.0</em:minimalVersion>。 作为一个细心的程序员,我确实在我的插件中有这个设置(并且很高兴这可以防止人们过早更新 运行 旧的 FireFox 版本,正如预期的那样)。

所以我继续调试我的过渡插件(使用 firefox --consoleabout:debugging 加载未签名的测试版本)并观察我在问题 post 中写的内容。 对我观察到的问题的解释很简单,我用我的普通稳定版 FireFox(当时版本 50)进行了调试,但没有注意到这一点,因为在尝试加载插件时没有发生错误(错误会发生在<em:minimalVersion> 以下的版本,不是吗)。但是当然(?)这已经是调试的一个特性:在那种模式下,即使版本检查失败也会加载插件...

使用较新的 FireFox(aurora 或 nightly),一切都很好。