firefox插件从bootstrapped到webextension的转换不起作用

时间:2016-11-26 16:48:20

标签: firefox-addon firefox-webextensions

我正在尝试从bootstrapped插件转换到webextension插件。为此,我想从一个中间版本开始,这是一个带有嵌入式webextension的bootstrapped扩展;这应该特别将个人设置从旧式首选项复制到新式本地存储。

我想我遵循了我发现的说明:

  • 我将嵌入式网站扩展添加为webextension\background.js<em:hasEmbeddedWebExtension>true</em:hasEmbeddedWebExtension>
  • 我将webextension.startup添加到install.rdf
  • 我在bootstrap.js中从startup()内调用startup(data,reason);这将导致通过一些消息复制设置

根据我在文档中的内容,webextension的第一个参数应该由id属性增强。但是,似乎情况并非如此:我的转储仅显示versioninstallPathresourceURIinstanceIDminimal.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}}

1 个答案:

答案 0 :(得分:0)

一切都很好,没有真正的问题,或者至少在非调试环境中没有:

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

所以我开始调试我的过渡插件(使用firefox --consoleabout:debugging加载未签名的测试版本)并观察我在问题帖子中写的内容。 我观察到的问题的解释只是我使用我的普通稳定FireFox(那时版本50)进行了调试,并且没有注意到因为在尝试加载插件时没有发生错误(并且会发生错误)如果版本低于<em:minimalVersion>,则不会这样做。但当然(?)已经是调试的一个特性:在该模式下,即使版本检查失败,也会加载插件......

使用较新的FireFox(极光或夜间),一切都很好。