微软近日发布了192项测试的结果,这些测试分为HTML5、SVG 1.1、CSS3以及二级、三级DOM等八类,结果显示IE9成功通过了所有测试,而Chrome、Firefox、Opera以及Safari在各个类别中都或多或少有未通过的情况。 由此得出的结论是,与Google、Mozilla、Opera相比,IE9对于W3C标准有着最好的兼容性。
微软与万维网联盟(World Wide Web Consortium W3C)合作,创建了192个测试页面,各种主要浏览器在这些页面中的测试结果如下图所示:
结果的总结之后是详细的各项结果,并带有包含各种测试页面的链接,任何人都可以执行这些测试。 由此得出的结论是: IE 9的预览版完全兼容这些测试中所包括的W3C标准,而其他浏览器无法达到这一点。 在其他浏览器中,成绩最好的是Firefox,它完全通过了DOM 2的测试,但是大多数浏览器在很多类别中的测试结果都是黄色或者红色。 InfoQ采访了Google、Mozilla和Opera,想要了解他们对于此次测试、结果以及结论的看法。
Google提到了Google I/O大会第一天中的内容,在其中他们讲述了浏览器中有关HTML5的问题,并且期望在2010年底,除IE之外的所有浏览器都能够完全实现HTML5以及其他一些标准。
Mozilla认为微软的测试覆盖范围有限,因此不够准确,并会产生误导:
我们很高兴微软热衷于使用这套测试来衡量浏览器对标准的兼容性,但是MSDN上这些特定的测试涉及到的范围很有限,并且关于浏览器兼容性的说法很显然会产生误导。
大家都知道,MSDN提到的SVG-in-HTML的测试是不正确的[1][2],它不符合HTML5解析规则和DOM规范,事实上利用的是IE的缺陷。微软的工程师都了解该缺陷,并且知道该项测试本身就是错误的,因此很让人奇怪的是,这项测试竟然被作为浏览器之间更进一步的互操作性的重要部分来介绍。另一方面,Firefox的beta版本确实已经具备了HTML5解析器[3],并且每夜构建[4]将会通过SVG-in-HTML的正规测试。
此外,MSDN上列出的CSS测试很不精确,事实上,完全通过了这些测试的浏览器并不与标准兼容。有一份官方的CSS3选择器测试,我们已经通过了所有测试[5],并且,我觉得对于web开发者来说,当讨论浏览器对HTML5、CSS3和SVG的支持的时候,像caniuse.com [6]这样的站点会更有用。Mozilla会继续致力于为处于考虑之中的规范[7]创建开发和公平的测试套件,也希望其他浏览器厂商能够参与进来。
更新:Mozilla还更新了他们的声明,增加了下面这段简短但很有意义的信息:
我们得到微软的反馈,他们正在试图修正那些测试。
Opera知道微软的测试和结果,但是他们使用了不同的测试套件,并得到了完全不同的结果:
我们没有执行内部的专门测试,而是一直在做大范围的测试,以确保我们在自己的浏览器产品中实现了所有HTML5中我们所制定的部分。 Opera对HTML5标准作出了很大的贡献,正是在Opera提出了Video标签之后,它才被加入到标准之中。 我们一直在努力改善产品,以确保最大可能地遵守规范。
这项测试是非常有选择性的,它慎重地选择了所有要测试的元素,使结果看起来是“独赢”的效果。 当评估HTML5测试的时候,标准应该与其他所有类型测试相同。 测试的权威性应该是独立的,并且测试应该反应出规范的真实情况。 我们很容易就能指出Opera比IE表现得好的HTML5相关的测试,比如下面这个: http://www.codedread.com/svg-support.php. …
我们一直在测试,以了解我们的浏览器的兼容性如何,但是对于HTML5的兼容性工作还在进行之中。 因此根据微软的网页,他们看起来只测试了HTML5中特定的一部分,而没有测试更多的内容,像Canvas元素等。
很有趣的是,Opera指出测试结果显示,Opera 10.53浏览器对SVG 1.1测试的通过率是94.89%,而IE 9 Preview 2的通过率只是30.55%。 Opera 10.52在微软的测试中有同样的表现,但是IE9在该项测试中的通过率是100%,这与30.55%相去甚远。
一位软件开发者Jeff Schiller执行了Opera所提到的测试,并对微软的测试结果做出了评论:
尽管我对IE9的发展方向感到很激动,并且一直对于你们参与SVG工作组的程度有很深的印象,但是我感觉“IE测试中心”有很大的问题,并且会 误导他人。 即使是微软也承认他们只包含了自己所编写的测试(声称IE9可以通过)而不是完全的测试套件。
例如: SVG测试套件包括275项测试。 而微软在测试页面中只包含了31项。 例如,IE9甚至不支持渐变色。
另外一个例子,他们的HTML5的测试中关于一行中的SVG标记的测试实际上是错误的。 它们之所以在IE9中能够通过,是因为浏览器在处理子节点的时候存在缺陷。 如果我修正该项测试,它们就只会在Firefox每夜构建版本中通过,而在IE9中会失败。