iframe会以怪癖模式渲染吗?

Chr*_*her 11 iframe internet-explorer rendering quirks-mode

我正在设置一个页面,并且很难让它在浏览器中看起来很好(实际上只是IE,因为它适用于mozilla和webkit).在认真考虑自IE6以来修复的旧IE错误之前,我想排除怪异模式.容器页面具有声明的doctype,但iframe代码没有.iframe内容是以quirks-mode(因为它没有doctype)还是标准模式(因为容器有doctype)呈现的?来源遵循这个方案:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
...
<body>
...
<iframe ...>
    <html>
    <head>
    ...
    </head>
    <body>
    ....
    </body>
    </html>
</iframe>
...
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

mik*_*epr 23

在IE9之前,iframe中的网页将根据自己的doctype进行渲染,而不是根据父容器的doctype进行渲染.但是,在IE9中,Microsoft更改了行为,以便子iframe从父容器继承其doctype /呈现.

请注意,只要使用兼容性视图,IE9仍将以传统方式(iframe尊重其自己的doctype)运行.

在您的情况下人们的最佳解决方法 - 编写符合标准的容器页面,但需要包含带有怪癖模式页面的iframe - 是在您的doctype和父页面中的开始标记之间添加以下元标记之一.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Run Code Online (Sandbox Code Playgroud)

这些标签基本上会告诉IE9假装它是IE7或IE8.在仿真中包括用于确定子iframe的渲染模式的逻辑.此解决方法的缺点是您将无法在父页面中使用IE9支持的任何新功能,但这可能比子页面中的大量呈现错误更可取.

有关详细信息,请参阅http://web.archive.org/web/20110905060718/http://www.sitepoint.com/forums/html-xhtml-52/ie9-iframes-doctypes-you-743000.html.

  • 哦顺便说一句:停止提升它,这听起来不错,但它不起作用. (4认同)
  • 不幸的是,外部链接坏了 (2认同)

ann*_*ata 15


买者自负

有些人遗憾地没有注意到这个答案在IE9存在之前发布并被接受了很长时间,这改变了问题的条款.我通常会删除这个,以避免捕获任何更多的downvotes但由于答案实际上仍然是真实的,并且遗憾地与浏览器人口统计数据的大部分相关,我将把它留下来.请不要再投票了.


Quirksmode:IE将iframe渲染为单独的文档节点,不继承doctype,并且将quirks作为默认值.

编辑:别人的示范您的问题和非继承证明(与感谢我的书签:P)

但是,您选择"Almost"作为您的doctype,这意味着无论如何都不允许使用iframe.你可以得到有效的iframe的唯一方法是,如果父母是怪癖那么继承或不是一个有争议的点.

推荐阅读.

  • 错误 - 从IE9开始,doctype IS继承了......你的困惑源于这样一个事实:在IE8中,这是不同的...... (7认同)
  • +1来补偿downvotes :-) (3认同)
  • 我的"困惑"来自这样一个事实:答案早于IE9已经过了好几个月.有用的事情就是相应地进行编辑,但是嘿,我觉得downvotes很有趣,而且阅读就是技术. (2认同)