script的src和link的href属性值为空的陷阱
2010-8-2 update:经过测试发现,但script的src和link的href属性值为#的时候,也会发生同样的事情:给服务器发送一个HTTP请求,并把当前页面作为返回值。浏览器的异同与下面的结论相同。通过js动态生成的script和link元素也一样。
————-============————-============————
有些时候,我们在写HTML页面的过程中,通过script标签来外联外部的js文件,可是不小心给src属性赋值为空,当然有时候也会在link元素中带上了空属性值的href属性,我们想当然的认为这个没多大的影响,浏览器也会按照你认为的方式来解析它们。但是这个想当然估计错误了。先看几个测试页面:《HTML5 Doctype下href=”"》,《HTML5 Doctype下src=”"》,《XHTML1.0 Doctype下href=”"》。
使用firebug来查看DOM节点树的link和script节点,你就会发现怪异的事情发生了:link和script节点的内容居然是当前html页面的内容!!确实不可思议,就连容错机制最好的XHTML1.0的DTD声明也无济于事,这恐怕就是浏览器渲染页面的问题了。script节点src属性为空的时候就更恐怖了,会造成了语法错误。可更不可思议的是,出现这个问题的浏览器居然不是IE。经过多个浏览器的测试,IE和Opera都能很好的处理这个问题,可是Firefox、Chrome、Safari居然出现了。
对于这个初步总结为:当link标签的href属性为空、script标签的src属性为空的时候,浏览器渲染的时候会把当前页面的URL作为它们的属性值,从而把页面的内容加载进来作为它们的值。动态修改它们的href或者src属性值为空的时候,也将会出现这个问题:《动态修改href为空》。
因此,在我们平时写HTML页面,或者动态生成这两个标签的时候,尽量避免陷入了上面出现的陷阱,好好对待浏览器,编写符合规范的HTML标签语法和嵌套规则,多余的就别多此一举去倒弄,它回报给你的将是更少的开发时间和精力。
当某天你测试上面给出的测试样例并没有发现这个问题的时候,那就是浏览器修复了这个bug了。



