Chrome在解析html时的一个bug

最近在写html分析程序,应为chrome的“开发人员工具”可以直接看到浏览器对代码的分析情况,比较方便,所以选择它作为分析结果的参照。

出于容错方面的考虑,我会有意写一些不标准的html代码来做测试,并查看是否与chrome的分析结果一致。在偶然间发现了这个小bug。

 

 

<div ="k">aaa</div>

 

 

此时chrome显示的html代码为

 

<div k="k">aaa</div>

 

 

当一个属性值被单引号或者双引号包围放在等号右侧,并且没有属性名在左侧的时候,chrome会把这个属性值作为属性名复制到左侧。前提是等号与引号包围,等号两侧可以有空格并不限数量,引号包围的值可以是任意值。

 

可以测试一下这个属性是否有效

 

<div ="k" onclick="(function(o){alert(o.getAttribute('k'));})(this)">aaa</div>

 

 

在chrom下这个点击事件正确地返回了属性k的值,但ie和ff均为null。

 

比较致命的是,引号包围内的值可以是任意值:

 

<div ="alert(1>0)">aaa</div>

 

 

chrome认为是:

 

<div alert(1="alert(1">0)">aaa</div>

 

 

看着有点乱我解释一下。它首先取了alert(1>0)这一段,并且忽略了>之后的代码,因为它认为这个>是封闭标签的字符,剩下alert(1作为属性值和属性名,并规范为alert(1="alert(1"。但是对之后的代码仅仅是做了替换,留下了>0)"这4个字符。重新分析的时候,在这4个字符中0之前的>号封闭了div标签,剩下的就作为文本显示到前台了。

ie6/ff3.6.8均无此问题。

posted @ 2010-08-26 20:08  MKing's Kindom  阅读(1868)  评论(22编辑  收藏  举报