完美HTML
原文:
http://www.crockford.com/html/
作者: Douglas Crockford 翻译:Terry Luo HTML需要修正了。HTML4自1999年发布以来,互联网由最初的文档检索系统发展到今天的应用传输系统。凭借web开发者的睿智和Javascript出色的表现力,我们取得了重大的进步,但是我们还是遇到了瓶颈。HTML不再是创新的动力,如今它却是一个严重的障碍。 HTML本身有很多不错的概念,然而它们却被XHTML丢弃了。我认为我们应该退一步重新思考。HTML的问题并不会因为HTML本身变庞大和复杂而能解决的。相反我认为我们应该总结它好的一面,再祛除有问题的一面。HTML在不破坏它原本充当文档格式的角色之外,还能被当作一种通用的应用传输格式。 我寻求中的新语言并不能和HTML4完全兼容。而HTML4也并未完全兼容HTML3,XHTML也并未完全兼容,所以这不是问题。 这就是我所提议的HTML5,它将更友好更优雅。 HTML <html>标签有一个可选的版本属性(version)。若值是5,则按HTML5解析。若值是4或未定义版本属性,则按HTML4解析。 <html version=5> Doctypes将不复存在 Script(脚本) 每个页面只允许有一种脚本语言。这是为了节省因为新脚本语言的引入而使浏览器需要统一对象及内存模型的额外开销。同时也为将Javascript替换为安全的语言代码做好准备。假如将一种不安全的代码和一种安全的代码混杂在一起,那就毫无安全可言。代码将被指定为:content-script-type,默认为application/ecmascript。 <meta http-equiv=content-script-type content=application/ecmascript> <script>标签不定义type或language,它是<head>或<body>的直接子标签。<script>标签不会立即被执行,也不会中断浏览器对其它资源的加载。当到达</head>时,所有head区域内的脚本将会被依次解析。当到达</body>时,所有的body区域内的脚本将会被依次解析。 再也没有document.write了,再也没有事件监听了,再也没有javascript:这样的链接了。 Frames(框架) 不再有framesets、frames或iframes,它们都存在安全问题。我们将引入modules。 Modules(模块) <module>标签创建一个带通信通道的内嵌子文档。详细可以参考:http://json.org/module.html 。我将用我建议Google Gears 和 Adobe AIR使用的通用通信机制代替它的通信机制。 CSS(样式) 统一默认CSS的内容,如: http://developer.yahoo.com/yui/reset/。浏览器在渲染默认样式时应该更加一致。 getElementsByCSSSelector方法允许基于CSS选择符抓取元素对象。 更多对于CSS需要改进的地方将不在本文的讨论范围之内。HTML的简化对CSS也有益,CSS将更加从容地应对类似对齐、版式、呈现的事情。 Encoding(编码) HTML5中唯一允许的编码是UTF-8。允许多种编码方式的默认支持和自定义编码方式都是对用户安全的威胁,同时也降低了文档的完整性。文档定义编码和文档内容本身编码不符的情况并不少见。使用一种编码将会让这一切更容易也更准确。亚洲字符集则可以使用gzip来压缩。 Entities(实体) HTML5对HTML实体有明确的定义。过去,有些浏览器对一些糟糕的实体过于仁慈,这将对用户的安全产生威胁。浏览器不应该将这些糟糕的实体显示出来。这将导致安全漏洞。 Empty Tags(空标签) 允许<empty/>形式的空标签,但不要求<br>和<hr>也这么用。空标签也可以这样用:<script src="url"/> Custom Tags(自定义标签) HTML一直都允许自定义标签。在HTML5中,它们将更加出众。 CSS可以定义自定义标签。 mymenubar {display: div; width: 100%;} display样式属性表示标签名。这意味着,它仅对你自定义的标签生效。 getElementsByTagName方法可以抓取自定义标签的对象。 Custom Attributes(自定义属性) HTML一直都允许自定义属性,在HTML5中,它们将更加出众。 getElementsByAttribute方法还是和过去一样,抓取自定义属性的对象。它可以传递1或2个参数,第一个参数是属性的名称,第二个可选参数是要匹配的值。 总结 这些变革极大的改进了HTML应用的可靠性、安全性及性能。对语言本身的简化也降低了WEB开发者的培训成本。它和Ajax开发的最佳实践融合在一起。在不提高复杂性的同时又具备扩展性。具有普遍性和简约型的HTML4的Deltas版本,使得浏览器解析起来更简单。这对于没有复杂平台的移动终端来说显得尤为重要。本文唯一出现的新特色就是“module”,它对安全来说显得尤为重要,也让安全的mashup成为可能。 |