我正在尝试从bootstrapped插件转换到webextension插件。为此,我想从一个中间版本开始,这是一个带有嵌入式webextension的bootstrapped扩展;这应该特别将个人设置从旧式首选项复制到新式本地存储。
我想我遵循了我发现的说明:
webextension\background.js
和<em:hasEmbeddedWebExtension>true</em:hasEmbeddedWebExtension>
webextension.startup
添加到install.rdf startup()
内调用startup(data,reason)
;这将导致通过一些消息复制设置根据我在文档中的内容,webextension
的第一个参数应该由id
属性增强。但是,似乎情况并非如此:我的转储仅显示version
,installPath
,resourceURI
,instanceID
和minimal.xpi
,因此我无法做到以上第三点。
我能做错什么?
编辑:简化为最小示例bootstrap.js
,其中包含
startup
(请注意webextension示例后面的startup(data,reason)
签名,而不是“旧式”function startup({webextension} /*was: data,reason*/) {
console.log("A");
webextension.startup().then(api => {
console.log("B");
});
console.log("C");
}
)
install.rdf
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>minimalexample@example</em:id>
<em:name>Minimal Example</em:name>
<em:version>1.0.0</em:version>
<em:type>2</em:type>
<em:hasEmbeddedWebExtension>true</em:hasEmbeddedWebExtension>
<em:bootstrap>true</em:bootstrap>
<!-- Firefox -->
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>46.0</em:minVersion>
<em:maxVersion>99.0</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>
webextension\manifest.json
{
"name": "minimal example embedded webextension",
"version": "1.0.0",
"manifest_version": 2
}
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
预期的行为:“A”,“B”和“C”出现在控制台日志中(其中“B”可能出现在“C”之后,因为承诺的异步性质)
实际行为:“A”出现在日志中,但后面跟着
{{1}}
答案 0 :(得分:0)
一切都很好,没有真正的问题,或者至少在非调试环境中没有:
首先,应注意 webextensions 自FireFox版本45以来一直存在。但是,直到最近,很难从遗留插件过渡到webextension插件。也就是说,具有嵌入式 webextensions的传统插件的过渡插件仅可从FireFox的第51版获得。
因此,在编写带有嵌入式webextensions的插件时,应该注意在过渡插件的install.rdf中至少有<em:minimalVersion>51.0</em:minimalVersion>
。
作为一个细心的程序员,我确实在我的插件中设置了这个设置(很高兴这可以防止运行旧版FireFox版本的人过早更新,如预期的那样)。
所以我开始调试我的过渡插件(使用firefox --console
和about:debugging
加载未签名的测试版本)并观察我在问题帖子中写的内容。
我观察到的问题的解释只是我使用我的普通稳定FireFox(那时版本50)进行了调试,并且没有注意到因为在尝试加载插件时没有发生错误(并且会发生错误)如果版本低于<em:minimalVersion>
,则不会这样做。但当然(?)已经是调试的一个特性:在该模式下,即使版本检查失败,也会加载插件......
使用较新的FireFox(极光或夜间),一切都很好。