本文档是 Firefox 1.5(XULRunner 1.8)及更高版本中使用的版本格式的参考。此格式由扩展管理器,软件更新和平台其他部分的使用。至少以下位置的版本必须符合以下格式:
- 插件和目标应用版本安装和更新清单
在 app.extensions.version
和extensions.lastAppVersion
中- nsIXULAppInfo 返回的版本
- XULRunner 中的
application.ini
- chrome manifests 中的 appversion flag
您可以使用 nsIVersionComparator
来比较应用程序的版本。
有关 Firefox / Thunderbird 1.0 中使用的旧版本格式的说明,请参阅 Older version formats.
版本格式
版本字符串由一个或多个版本部分组成,用点分隔。
每个版本的一部分本身解析为四个部分组成一个序列:<number-a><string-b><number-c><string-d>.
每个部分都是可选的。数字是 10 进制的整数(可以是负数),字符串是非数字的ASCII字符。
有效版本部分的几个例子:
0
(例如1.0
):<number-a>=0
5a
(例如1.5a
):<number-a>=5
,<string-b>=a
5pre4
(例如3.5pre4
):<number-a>=5
,<string-b>=pre
,<number-c>=4
*
(例如1.0.*
):<string-b>=*
应用一些特殊的解析规则来实现向后兼容性和可读性:
- 如果版本部分是单个星号,则将其解释为无限大的数字:
1.5.0.*
和1.5.0.
是相同的(无限大) - 如果
<string-b>
是加号,则<number-a>
会增加以与 Firefox 1.0.x 兼容的版本格式:
1.0+
和1.1pre
是相同的
当比较版本时,将版本分解为字符串部分和数字部分对应起来一一比较, 例如 '1.0pre1' < '1.0pre10'。
有关如何比较版本的详细信息,请参阅下一节。
比较版本
当比较两个版本字符串时,它们的版本部分将从左到右进行比较。空的或缺少的版本部分等于 0 。
当一个版本字符串的版本部分大于另一个版本字符串的相应版本部分时,第一个版本字符串大于另一个版本字符串。
否则,版本字符串相等。请注意,由于缺少的版本部分被视为 0,所以以下版本字符串相等: 1, 1.0, 1.0., 1.0.0,
还有 1.0...
比较版本部分
版本部分也从左到右进行比较,将 <number-a>
和 <number-c>
作为数字进行比较,而 <string-b>
和 <string-b>
按字节比较。 存在的字符串部分始终小于不存在的字符串部分(如 1.6a
小于1.6
)。
一些例子
1.-1 < 1 == 1. == 1.0 == 1.0.0 < 1.1a < 1.1aa < 1.1ab < 1.1b < 1.1c < 1.1whatever < 1.1pre == 1.1pre0 == 1.0+ < 1.1pre1a < 1.1pre1aa < 1.1pre1b < 1.1pre1 < 1.1pre2 < 1.1pre10 < 1.1.-1 < 1.1 == 1.1.0 == 1.1.00 < 1.10 < 1.* < 1.*.1 < 2.0
技术参考
如果你有兴趣看 toolkit 版本比较的实现, 请参考 nsVersionComparator.cpp.
旧版本的格式
Firefox 和 Thunderbird 1.0 使用简单的版本格式,即
major[.minor[.release[.build]]][+]
其中 [..]
表示可选部分, major,
minor
,release
和 build
都是非负整数。