我正在设置一个页面,并且很难让它在浏览器中看起来很好(实际上只是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>
答案 0 :(得分: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" />
这些标签基本上会告诉IE9假装它是IE7或IE8。在仿真中包括用于确定子iframe的渲染模式的逻辑。此解决方法的缺点是您将无法在父页面中使用IE9支持的任何新功能,但这可能比子页面中的大量呈现错误更可取。
答案 1 :(得分:15)
CAVEAT EMPTOR
有些人遗憾地没有注意到这个答案在IE9存在之前发布并被接受了很长时间,这改变了问题的条款。我通常会删除这个,以避免捕获任何更多的downvotes但由于答案实际上仍然是真实的,并且遗憾地与浏览器人口统计数据的大部分相关,我将把它留下来。请不要再投票了。
Quirksmode:IE将iframe渲染为单独的文档节点,doctype不会被继承,并且quirks是默认值。
编辑:其他人demonstration您的问题和非继承证明(感谢我的书签:P)
但是,您选择“Almost”作为您的doctype,这意味着无论如何都不允许使用iframe。你可以得到有效的iframe的唯一方法是,如果父母是在怪癖中进行继承而不是有争议的话。
答案 2 :(得分:2)
请参阅此处的答案,了解有关IE9的MSDN记录解决方案:How to force Iframe to run quirks under a standard parent frame
简而言之,如果父页面在IE9模式下呈现,则无法在iframe中触发怪癖模式,但可能触发“怪癖模式模拟”嵌入在IE9渲染引擎中。
JSBin演示:http://jsbin.com/ozejuk/1/
进一步阅读:http://msdn.microsoft.com/en-us/library/gg558056(v=vs.85).aspx