什么是Web标准?

在网站开发过程中,你会听到词语“标准”很多次。我的意思是,很多次。Internet Explorer因为不支持标准而广为诟病,Opera自称是唯一的一个真正努力地完全实现标准的浏览器,而全世界的开发人员又相互责备没有遵循标准。可 笑的是,大部分人根本不理解什么是标准或者它们是怎么变成这样的。

让我们以互联网上的头号神话来说起:W3C创造了标准。这完全是错误的。 W3C宣称的目标是创造标 准,但是它不能够在实际上创造它们。为什么呢?因为,很简单,标准是大多数人决定要做的事情。因此,网页标准是大部分浏览器厂商决定要 追随的。W3C可以推荐应该怎么做,但是它没有权利强 制实施。如果W3C真的可以创造标准,那么我们也不会仍然在等待相关的浏览器支持XHTML了,它在1999年就完成了。W3C没有能力强制浏览器厂商做 任何事情;每个人都能决定自己想做什么。甚至参与到W3C的浏览器厂商都不遵循某些规范(全部的浏览器厂商都这样)。

所以如果我和我的同伴 这个周末聚到一起然后想出了一个很酷的JavaScript特性,那么我们就和W3C一样了。如果我们确定可以让Mozilla、Apple、 Microsoft和Opera实现这个特性,那么我们就已经创建了一个新的标准了——和W3C一样。没有一个官方的标志或印章可以让一些东西成为标准, 它只是由两个或更多浏览器来实现的。

W3C在创建标准上曾经很传统的不好。它们真正擅长的是文档化和标准化已经在浏览器中实现的东西。这样 导致了HTML 4 和DOM 1的创建大部分是基于在IE 4中的创新。是的,同学们,微软在创建这些标准方面是比其它任何浏览器都更有影响力的,因为它们不断前进和创新而等不及有人告诉它们已经好了。

事 实上,微软的很多创新都已经成为它们自己的标准,比如innerHTML 属性,XMLHttpRequest 对象,通过designMode的富文本编辑。没有浏览器敢不支持这些;这使它们成为了标准。W3C现在正在走一些流程将它 们引入到HTML 5 规范XMLHttpRequest 规范中。

责骂微软不支持标准似乎变得很流行,但是人们可以说,如果世界上最流行的浏览器不去实现某些东西,它就不会真正的成为标 准。保守估计Internet Explorer在全球有80%左右的市场份额(2008年)。也就是说只有20%的互联网用户在使用“兼容标准”的浏览器。当只有市场上20%的用户使 用它,它会是一个标准吗?仔细考虑一下吧。

真相是微软只是跟随了互联网中最顽固的企业的领导者:网景(Netscape)。网景是第一个说 “我们要做我们想做的”的,然后引入了<blink>标签。历史表明在浏览器厂商开始创新的时候,网络也跟着进步 了。微软不是唯一这样做的。Mozilla也实现了不标准的特性,比如XSLTProcessor;Safari 实现了<canvas> 标签;Opera 实现了<event-source> 标签和window.opera 对象。然而没有人抱怨它们做出了自己的东西和创新……只有微软是个坏小子。为什么这样?

正如Alex Russell多次指出的,创新并不在W3C的手中。真正的创新,可以带动互联网发展的创新, 需要来自于浏览器厂商。让自由的市场来决定浏览器中最有用的特性然后让W3C去规范它吧。那才是真正的标准。等到伟大的HTML 5规范在2022完成了,不会推动网络向前发展。得让像Alex一样聪明的家伙开发 浏览器才行(推动web进步)。

英文原文:What are web standards?
中文译文:什么是网页标准?

“什么是Web标准?”的12个回复

  1. 标准分为强制标准和推荐标准,w3c属于后者。w3c的工作就是集合众浏览器厂商的智慧,发布统一标准,众厂商再根据这标准开发,这样争取同一个网站在不同浏览器的显示效果是一样的。微软的毛病在于太顽固,迟迟不更新。

  2. 其实主要是IE在创新方面信步不前,ie6近5年没有更新,你能说它是一个很完善的浏览器吗?而且它自身不同版本在实现CSS方面都会自相矛盾;当然不可否认它对互联网做出的贡献,比如这个innerHTML的确很酷。
    感觉众多后来者都对ie这个大佬很不满,纷纷要革它的命,各自又推出了自己的特性,就连挂着IE内核的马桶都要自己搞个东东,因此有必要出来一个组织去规范混乱的浏览器,不然你真的不如让前台开发人员去死。从这个角度上去讲,本身也不必在意w3c没有创造,创造与不创造与规范本身并没有直接的关系吧?

  3. 看了你的文章,我才明确了一个想法,所谓标准不止是支持什么特性,更重要的是,同样的特性在所有的浏览器应该表现同样的效果,ie的错在一句css在不同的ie中会出现不同的样式,ie6的离谱在于css的实现跟自己的文档不同

发表评论

电子邮件地址不会被公开。 必填项已用*标注