为多个SDK版本开发Firefox Addon

时间:2014-11-11 05:59:40

标签: firefox firefox-addon firefox-addon-sdk

我看到每个cfx tools总是使用自己的minVersion和maxVersion生成xpi。但是,这些仅限于SDK兼容的版本,例如, SDK 1.14仅适用于FF 21 - 25.0a1,SDK 1.17仅适用于FF 26 - 30.我的问题是:

  1. 每次新版本推出时,是否需要使用新SDK打包我的扩展程序?
  2. 将来如何维护和更新我的扩展程序? Addon Developer Hub是否提供了为多个SDK版本提交相同扩展名的方法?我试图环顾四周,但无法找到提交多个版本的方法。 我想将FF 21作为最低版本,因为那是内置SDK的版本。我的扩展目前使用SDK 1.14和SDK 1.17进行编译,仅进行修饰(语法)调整。

2 个答案:

答案 0 :(得分:1)

开发人员中心允许您选择加载项兼容的Firefox版本。这只是setting the minVersion and maxVersion in the install.rdf的GUI。只要您不使用需要Firefox 22+的模块或方法,您使用的SDK版本就不重要,因为正在运行的SDK版本取决于您用户的版本和#39;浏览器。

很难找到特定于模块的兼容性(您可以随时查看特定模块的文档并查看编辑历史记录),但请查看SDK API Lifecycle以了解哪些模块可以使用。一些值得注意的例子是:

处理上述内容以实现向后兼容的一种方法是执行以下操作:

const { version } = require('sdk/system/xul-app');
if (version < 29) var widget = require("sdk/widget").Widget({...});
else var button = require("sdk/ui/button/action")({...});

所以,要明确:

  1. 除非您想使用新模块,否则使用哪个版本的SDK并不重要。
  2. 不,您不应该制作多个版本的插件。如果要为新浏览器使用新模块,请按照上面的代码示例进行操作。

答案 1 :(得分:1)

确实,您必须使用有效的existing application versions,但通常不需要重新打包您的插件,除非SDK中的更改直接影响您的插件。

原因是默认情况下不会检查最大目标版本。

来自install manifest documentation

  

<强> strictCompatibility

     

一个布尔值,指示当应用程序的版本大于其最大版本时是否应启用加载项。默认情况下,此属性的值为false,表示不会对最大版本执行兼容性检查。

<em:strictCompatibility>true</em:strictCompatibility>
     

通常,不需要限制兼容性:并非所有新版本都会破坏您的扩展程序,如果它在AMO上托管,如果检测到潜在风险,您将提前几周收到通知。此外,即使在短时间内被禁用的扩展也会导致用户的糟糕体验。如果您的插件执行可能被Firefox更新破坏的内容,那么您应该只需要设置此项。如果您的加载项具有二进制组件,则不需要设置此标志,因为具有二进制组件的加载项始终需要进行严格的兼容性检查(因为无论如何都需要为每个主要的应用程序版本重建二进制组件)。 p>

还有recommendation for choosing version ranges

  

minVersion和maxVersion应指定您已测试的应用程序的版本范围。特别是,您不应该指定比当前可用的应用程序版本更大的maxVersion,因为您不知道哪些API和UI更改即将到来。通过兼容性更新,没有必要发布扩展的全新版本只是为了增加其maxVersion。

从技术上讲,您可以使用通配符,但文档中多次提到AMO会验证并可能拒绝版本不正确的插件。