自从有了XHTML,很多开发者会本着尽善尽美精益求精的态度,开始对代码进行一系列的修正和优化了。
比如,标签都要关闭了:
<img src="xxx" />
这本来没有错,可这时候突然冒出个新问题来:
有些代码看似没有错误合乎语法,可就是无法达到预期的效果,典型症状之一就是脚本“缺少对象”/“变量未定义”等异常。
这极有可能是“优化”后的代码产生的浏览器兼容性bug:某些标签的关闭“优化”要慎用。
比如<script>标签,当前部分浏览器就不支持<script />这种在开始标签中直接关闭的写法。
我们很容易会认为,引用外部脚本文件的<script>没有内容,那是否可以直接在开始标签中关闭<script>,写成下面这样呢?
<script type="text/javascript" src="xxx.js" />
实测结果告诉我们,这样做是有问题的。
某些浏览器不认这种写法,它们会将紧接在<script />标签后面的内容都当作脚本内容来处理,直到遇见下一个</script>关闭标签。
避免这个问题也很简单:
对于<script>标签,永远都使用单独的关闭标签</script>,这样所有浏览器都能够按照预期的效果来解析:
<script type="text/javascript" src="xxx.js"></script>
具有类似问题的标签还有一些,比如<iframe>。解决办法同上。
进一步说,想要彻底解决这一类问题的话,请将所有标签的开始和结束都分开写吧:
<img src="xxx"></img>
<hr></hr>
顺带一提,这样还能解决另一个问题:
在开始标签中关闭的话,斜杠前必须留有空格——很多时候人们会很容易漏掉这个空格,据说这样某些浏览器的解析也会出问题。
既然我所有的开始结束标签都分开写了,那这个问题不是自然就没有了么?
这么做太极端?那就只记住这几个特例吧:首先就是<script>和<iframe>。
测试你的浏览器是否支持<script />这种写法:
目前看来,WinXP SP3下IE6/7/8和FF3都有这个问题的,Opera10/Chrome5/Safari5则没有。
不过另一个<iframe>标签同样的问题,上面这些浏览器则好像无一幸免了。