为什么CDATA部分内的IFRAME会破坏解析器?

时间:2013-03-12 22:11:24

标签: html xml iframe xhtml cdata

我有一个CDATA部分,其中包含嵌入式iframe声明,如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
    <div>before iframe</div>
    <iframe id="xml_test">
        <?xml version="1.0" encoding="UTF-8"?>
        <xml_data>
            <node>
                <![CDATA[
                    "<iframe src=\"http://imgur.com\"></iframe>"
                ]]>
            </node>
        </xml_data>
    </iframe>
    <div>after iframe</div>
</body>
</html>

在几个浏览器中查看生成的DOM,似乎不会忽略CDATA部分中的iframe声明:

enter image description here

HTML也搞砸了:

enter image description here

从CDATA部分删除结束iframe标记会修复它:

enter image description here

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

<iframe>元素的内容不能像内联那样定义。在第一个</iframe>之前,标签的内容都会被忽略,这会使id=xml_test关闭元素;其余的解析应该是有道理的。