为多SDK版本开发Firefox插件

为多SDK版本开发Firefox插件,firefox,firefox-addon,firefox-addon-sdk,Firefox,Firefox Addon,Firefox Addon Sdk,我看到每一个都总是用自己的minVersion和maxVersion生成xpi。但是,这些仅限于SDK兼容的版本,例如,SDK 1.14仅适用于FF 21-25.0a1,SDK 1.17仅适用于FF 26-30。我的问题是: 每次发布新版本时,我是否需要用新SDK打包扩展 将来如何维护和更新扩展?是否提供了为多个SDK版本提交相同扩展的方法?我试着四处看看,但找不到提交多个版本的方法。 我想让FF 21作为最低版本,因为这是一个内置SDK的版本。我的扩展目前使用SDK 1.14和SDK 1.17

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

  • 每次发布新版本时,我是否需要用新SDK打包扩展
  • 将来如何维护和更新扩展?是否提供了为多个SDK版本提交相同扩展的方法?我试着四处看看,但找不到提交多个版本的方法。 我想让FF 21作为最低版本,因为这是一个内置SDK的版本。我的扩展目前使用SDK 1.14和SDK 1.17进行编译,只进行了表面(语法)调整
    开发者中心允许您选择插件与哪些版本的Firefox兼容。这只是一个图形用户界面。只要您不使用需要Firefox 22+的模块或方法,那么使用哪个版本的SDK就无关紧要,因为运行的SDK版本取决于用户浏览器上的版本

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

    • 需要FF29,其某些功能需要FF30
    • 从FF 29起,不再推荐使用,取而代之的是上述内容
    处理上述向后兼容性的一种方法是执行以下操作:

    const { version } = require('sdk/system/xul-app');
    if (version < 29) var widget = require("sdk/widget").Widget({...});
    else var button = require("sdk/ui/button/action")({...});
    
    const{version}=require('sdk/system/xul-app');
    if(version<29)var widget=require(“sdk/widget”).widget({…});
    else-var-button=require(“sdk/ui/button/action”)({…});
    
    因此,需要明确的是:

  • 除非您想使用新模块,否则使用哪个版本的SDK并不重要
  • 不,您不应该制作多个版本的附加组件。如果您想为新浏览器使用新模块,请遵循上面的代码示例

  • 确实,您必须使用valid,但通常不需要重新打包您的插件,除非SDK中的更改直接影响您的插件

    这是因为默认情况下,不会检查最大目标版本

    从:

    严格兼容性

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

    <em:strictCompatibility>true</em:strictCompatibility>
    
    true
    
    通常,不需要限制兼容性:并非所有的新版本都会破坏您的扩展,如果它托管在AMO上,如果检测到潜在风险,您将提前几周收到通知。此外,即使在短时间内禁用扩展,也会给用户带来不好的体验。如果你的插件做了一些可能被Firefox更新破坏的事情,那么这大概是你唯一需要设置的时候了。如果您的外接程序具有二进制组件,则不需要设置此标志,因为带有二进制组件的外接程序始终要接受严格的兼容性检查(因为对于每个主要的应用程序版本,都需要重新生成二进制组件)

    还有一个

    minVersion和maxVersion应指定已测试应用程序的版本范围。特别是,您永远不应该指定大于应用程序当前可用版本的maxVersion,因为您不知道即将发生什么API和UI更改。随着兼容性的更新,不必仅仅为了增加maxVersion而发布扩展的全新版本


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

    我想检查版本是一种方法。然而,我认为第一点是错误的。新SDK有时甚至会对模块名称做出突破性的更改(例如,
    SDK/system/xul-app
    过去在旧SDK中是
    xul-app
    ),目前有许多模块被定义为实验性的。缺乏关于向后兼容性的文档,并且可能会拒绝使用旧SDK(请参阅我对@kapep的评论)让我觉得实际上Mozilla不希望开发人员支持/使用旧SDK作为新插件。我说的对吗?从SDK 1.14和FF21开始,第1点是有效的,这就是您所说的希望支持的。他们不希望开发人员使用旧版本的SDK,但您仍然可以使用新SDK制作支持旧浏览器的插件。您必须针对使用每个版本SDK的浏览器进行测试。1.14是FF21,1.15是FF26,1.16是29,1.17是33您对可能被拒绝的担心使我深入研究了文档,我发现:除特殊情况外,我们接受附加SDK的两个最新小版本。如果验证器警告该插件使用的是过时的SDK版本,则如果该插件的版本比建议的版本早一个,则可接受全面审查。否则,它只能进行初步审查。