【发布时间】:2015-03-07 08:29:32
【问题描述】:
我遇到了一个我找不到解释的有趣问题。将 iframe(同源)中的 <body> 标记替换为 iframe.document.body.outerHTML = content; 时,会在 iframe 中添加一个额外的空 <head> 标记。这种行为在 Chrome 和 Firefox 中是相同的(我没有测试过 Safari 或 IE。)以下示例显示了问题,只需检查 iframe 以查看添加的 <head> 标记。
<!doctype html>
<html>
<head>
<title>iframe problem</title>
</head>
<body>
<iframe id="iframe"></iframe>
<script type="text/javascript">
var html = '';
html += '<!doctype html>';
html += '<html>';
html += '<head><style type="text/css">h1 { color: red; }</style></head>';
html += '<body><h1>Title</h1></body>';
html += '</html>';
var iframe = document.getElementById('iframe').contentWindow.document;
iframe.open();
iframe.write(html);
iframe.close();
for(var i = 0; i < 5; i++) {
content = '<body><h1>Title '+ i +'</h1></body>';
document.getElementById('iframe').contentWindow.document.body.outerHTML = content;
}
</script>
</body>
</html>
【问题讨论】:
-
看起来很有趣。有什么后果吗? document.head 好像是指第一个,也就是原文。
-
我还没有发现任何功能问题。我确信它会弄乱一些只需要一个 的脚本,因为它显然是无效的 HTML。我的强迫症真的在这里杀了我。
-
我删除了我的答案,因为我认为这是错误的。我想我错过了上下文节点应该已经有一个头标签,因此片段解析器将跳过添加一个。对此感到抱歉。
-
好的我已经看这个太久了,浏览了铬源代码,我不确定我错了,所以我把答案放回去了,供讨论最少。
标签: javascript html dom iframe