iframeはQuirksモードでレンダリングしますか?
-
02-10-2019 - |
質問
私はページのセットアップに取り組んでおり、ブラウザ全体でよく見えるようにするのが困難です(実際には、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>
解決
買い手責任負担
悲しいことに、この答えが投稿され、IE9が存在するまでにかなり長い間受け入れられていることに気づかなかった人もいたので、質問の条件を変更しました。私は通常、これ以上のダウンボートをキャッチすることを避けるためにこれを削除していましたが、答えは実際にはまだ真実であり、ブラウザの人口統計のかなりの部分に残念ながら関連しているので、私はそれを残します。これ以上投票しないでください。
Quirksmode:IEはIFRAMEを個別のドキュメントノードとしてレンダリングし、Doctypeは継承されず、Quirksがデフォルトです。
編集:他の誰かの デモンストレーション あなたの問題と非育児の証明の(私のブックマークに感謝:P)
ただし、とにかくIframesが許可されていないことを意味するDoctypeとして「ほぼ」を選択しました。有効なiFramesを取得できる唯一の方法は、親が継承を行うかどうかを誤っているかどうかにかかっている場合です。
他のヒント
IE9の前に、IFRAME内のWebページは、親コンテナのDoctypeに従ってではなく、独自のDoctypeに従ってレンダリングされます。ただし、IE9では、Microsoftが動作を変更して、子iFrameが親コンテナからDoctype/レンダリングを継承するようにしました。
IE9は、互換性ビューが使用されるたびに、従来の方法で動作することに注意してください(Iframeは独自のDoctypeを尊重します)。
あなたの状況の人々にとって最高の回避策 - 標準に準拠したコンテナページを作成しますが、Quirksモードページで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でサポートされている新機能のいずれも使用できないことですが、これはおそらく、子ページで大規模なレンダリングエラーよりも望ましいことです。
IE9のMSDN-Documentedソリューションについては、こちらの答えをご覧ください。 標準の親フレームの下でiframeを強制する方法
要するに、親ページがIE9モードでレンダリングしている場合、iframeでQuirksモードをトリガーすることはできませんが、それは 可能です トリガーに 「Quirks Mode Emulation」 IE9レンダリングエンジンに埋め込まれています。
JSBINデモ: http://jsbin.com/ozejuk/1/
参考文献: http://msdn.microsoft.com/en-us/library/gg558056(v=vs.85).aspx