【问题标题】:Developing Firefox Addon for multiple SDK version为多个 SDK 版本开发 Firefox 插件
【发布时间】:2014-11-13 01:37:49
【问题描述】:

我看到每个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 一起编译,只进行了外观(语法)调整。

【问题讨论】:

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


    【解决方案1】:

    开发者中心可让您选择插件与哪些版本的 Firefox 兼容。这只是setting the minVersion and maxVersion in the install.rdf 的 GUI。只要您不使用需要 Firefox 22+ 的模块或方法,您使用的 SDK 版本无关紧要,因为正在运行的 SDK 版本取决于您用户浏览器上的版本。

    很难找到特定模块的兼容性(您始终可以转到特定模块的文档并查看编辑历史记录),但请查看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 点是错误的。新的 SDK 有时甚至会对模块名称进行重大更改(例如,sdk/system/xul-app 在旧版 SDK 中曾经是 xul-app),目前有许多模块被定义为实验性的。
    • 缺乏关于向后兼容性的文档以及可能拒绝使用旧 SDK(请参阅我对 @kapep 的评论)让我觉得实际上 Mozilla 不希望开发人员支持/使用旧 SDK 用于新插件。我说的对吗?
    • 第 1 点从 SDK 1.14 和 FF21 开始有效,这就是您所说的想要支持的。他们不希望开发人员使用旧版本的 SDK,但您仍然可以使用新 SDK 制作支持旧浏览器的插件。您必须针对使用每个版本的 SDK 的浏览器进行测试。
    • 1.14 是 FF21,1.15 是 FF26,1.16 是 29,1.17 是 33
    【解决方案2】:

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

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

    来自install manifest documentation

    严格兼容性

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

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

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

    还有一个recommendation for choosing version ranges

    minVersion 和 maxVersion 应该指定您测试过的应用程序的版本范围。特别是,您永远不应指定大于应用程序当前可用版本的 maxVersion,因为您不知道即将发生哪些 API 和 UI 更改。通过兼容性更新,无需发布扩展的全新版本来增加其 maxVersion。

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

    【讨论】:

    • 您对可能的拒绝的担忧让我深入研究了文档,我发现this除特殊情况外,我们接受最近的两个次要版本附加 SDK。如果验证器警告插件正在使用过时的 SDK 版本,如果它是比建议版本旧的一个版本,则可以接受全面审查。否则,只能进行初审。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2017-07-01
    • 2022-07-07
    • 1970-01-01
    相关资源
    最近更新 更多