我正在设置一个页面,但在浏览器(实际上只是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>发布于 2010-09-15 21:58:09
买入者警告
不幸的是,一些人没有注意到,这个答案在IE9出现之前很长一段时间就已经发布和接受了,这改变了问题的条款。我通常会删除它,以避免获得更多的负面投票,但由于答案实际上仍然是正确的,不幸的是,与相当大一部分浏览器人口统计相关,我将把它留下来。请不要再贬低它了。
Quirksmode: IE将iframe呈现为单独的文档节点,不继承doctype,默认为quirks。
编辑:别人对你的问题的demonstration和非继承性的证明(感谢我的书签:P )
但是,您选择了“几乎”作为您的doctype,这意味着iframe无论如何都是不允许的。获取有效iframe的唯一方法是如果父对象处于怪癖中,这使得继承或不是一个有意义的点。
Recommended reading。
发布于 2011-04-12 00:22:57
在IE9之前,iframe中的网页将根据它自己的文档类型呈现,而不是根据父容器的文档类型呈现。然而,在IE9中,微软改变了行为,以致于子iframe从父容器继承其文档类型/呈现。
请注意,无论何时使用兼容性视图,IE9仍将以传统方式运行(iframe遵循其自己的文档类型)。
对于遇到这种情况的人来说,最好的变通办法是在您的doctype和父页面的开始标记之间添加以下两个元标记之一:编写符合标准的容器页面,但需要包含一个带有怪癖模式页面的iframe。
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
<meta http-equiv="X-UA-Compatible" content="IE=8" />这些标记本质上会告诉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。
发布于 2013-03-22 13:47:09
请在此处查看我对MSDN记录的IE9解决方案的回答:How to force Iframe to run quirks under a standard parent frame
简而言之,如果父页面以IE9模式呈现,则不可能在iframe中触发quirks模式,但它可以触发嵌入在IE9呈现引擎中的"quirks模式仿真“。
JSBin演示:http://jsbin.com/ozejuk/1/
进一步阅读:http://msdn.microsoft.com/en-us/library/gg558056(v=vs.85).aspx
https://stackoverflow.com/questions/3717932
复制相似问题