我们都知道:基于 UA 的浏览器检测 是一种不好的做法,正确的方法是特性检测。无论如何,遗留代码依赖于 UA 探测,可能需要针对 Firefox 10 的发布进行更新。
即使看起来很简单,UA 解析已被证明对许多脚本作者来说都是一个难题。尽管UA 的结构在 HTTP 规范中定义,但相关信息传递的方式在不同的供应商之间有所不同。此外,你想要从中提取的信息并不总是相同的:有时你想要知道浏览器(Firefox、SeaMonkey、Safari、Chrome、IE、Opera 等),但大多数时候你想要知道驱动它们的引擎(Gecko、Webkit、Trident 等)。你还需要获取浏览器或引擎的版本。
旧脚本通常会做出一些不必要的假设。有些假设浏览器版本号永远不会达到 10……事实并非如此:Opera 和 Chrome 早已突破了这一里程碑,Firefox 将在下周达到,而IE 也将在不久之后。
一些你的脚本应该允许的 Firefox UA 示例
- 常规 Firefox 版本:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0) Gecko/20100101 Firefox/10.0
- Nightly 和 Aurora Firefox 版本:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:12.0a1) Gecko/20120122 Firefox/12.0a1
- Chemspill Firefox 版本(三位数) Mozilla/5.0 (Windows NT 6.2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
所以,在你的网站陷入混乱之前,这是最后一次检查你的基于 UA 的浏览器检测代码的机会!
最后一次检查机会
现在就去做,两周后就太晚了。
该怎么做?
- 代码检查:检查你的代码,看看是否存在一些基于 UA 的浏览器检测代码。如果有,请检查它是否处理多位数版本。(同时,你可以检查它是否还有用。一些旧的 UA 检测代码已经很久没用了,或者试图解决浏览器多年来已经修复的问题……)
- 库检查:许多库执行基于 UA 的浏览器检测。如果你正在使用其中任何一个,请检查它是否仍然适用于带有两位数版本的 Firefox。如果不是,请通知库的作者并在Bugzilla 上提交一个错误,以便我们可以帮助其他人,因为他们所有的客户都可能遇到同样的问题。
- 检查你的网站是否适用于下一个 Firefox 版本:下载Firefox 10 的 Beta 版本(你可以同时运行多个版本的 Firefox 同时) 如果你正在维护一个网站,使用 Firefox 的 Beta 甚至 Aurora 版本始终是一个好主意:你将更早地发现不兼容性,并在用户开始抱怨之前获得时间来修复它们。我们正在尽最大努力防止出现问题,但有时旧代码依赖于不正确的行为,即使我们只是修复了错误,它们也会停止工作。
- 测试其他网站 :-)。使用 Firefox 的 Beta 或 Aurora 版本浏览网页。当你遇到与 UA 相关的错误时,在 Bugzilla 上报告它。尽可能多地提供信息,例如该网站在你所在国家的的重要性以及你是否自己采取了任何措施。这样,我们的布道团队才能适当地优先安排工作。
最后,你应该计划摆脱这些基于 UA 的浏览器检测机制。如果你不能——我知道这并不总是可能的——我很乐意知道原因:所以请在下面的评论中告诉我们。
现在是时候检查你的网站了 :-)
非常感谢你的帮助。
关于 Jean-Yves Perrier
Jean-Yves 是 Mozilla 开发者推广团队的项目经理。在此之前,他是一名 MDN 技术作家,专门从事 Web 平台技术(HTML、CSS、API),并且担任了多年的 MDN 内容负责人。
41 条评论