我看到每个cfx tools总是使用自己的minVersion和maxVersion生成xpi。但是,这些仅限于SDK兼容的版本,例如, SDK 1.14仅适用于FF 21 - 25.0a1,SDK 1.17仅适用于FF 26 - 30.我的问题是:
答案 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 :(得分: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会验证并可能拒绝版本不正确的插件。