• 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均无此问题。

  • 相关阅读:
    Java高级架构师(一)第04节:Git基本原理和安装配置使用
    发光边框
    单位px 转换成 rem
    web app 自适应 弹性布局之rem
    移动端UC /QQ 浏览器的部分私有Meta 属性
    常用<meta>标签
    移动端<head>头部 常用<meta>标签
    移动平台对 META 标签的定义
    减去border边框
    伪类共用样式缩写形式
  • 原文地址:https://www.cnblogs.com/muse/p/1809455.html
Copyright © 2020-2023  润新知