11

私はページの設定に取り組んでいますが、ブラウザー全体でうまく表示するのに苦労しています (実際には、mozilla と webkit で適切にレンダリングされるため、IE だけです)。IE6 以降に修正された古い IE のバグを真剣に検討する前に、Quirks モードを除外したいと考えています。コンテナー ページには宣言された 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>
4

3 に答える 3

23

IE9 より前では、iframe 内の Web ページは、親コンテナーの Doctype に従ってではなく、独自の Doctype に従ってレンダリングされていました。ただし、IE9 では、Microsoft は動作を変更して、子 iframe が親コンテナーから doctype/rendering を継承するようにしました。

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 でサポートされている新機能を親ページで使用できないことですが、子ページで大量のレンダリング エラーが発生するよりは、おそらく望ましい方法です。

詳細については、 http://web.archive.org/web/20110905060718/http://www.sitepoint.com/forums/html-xhtml-52/ie9-iframes-doctypes-you-743000.htmlを参照してください。

于 2011-04-11T16:22:57.190 に答える
15

買い手責任負担

悲しいことに、この回答が投稿され、IE9が存在するかなり前に受け入れられたことに気付かなかったため、質問の条件が変わりました。私は通常、これ以上の反対票を受け取らないようにするためにこれを削除していましたが、答えは実際にはまだ真実であり、ブラウザの人口統計のかなりの部分に悲しいことに関連しているので、そのままにしておきます。もう反対票を投じないでください。


Quirksmode:IEはiframeを個別のドキュメントノードとしてレンダリングし、doctypeは継承されず、quirksがデフォルトです。

編集:あなたの問題の誰かの他のデモンストレーションと非継承の証明(私のブックマークのおかげで:P)

ただし、Doctypeとして「Almost」を選択しました。これは、iframeがとにかく許可されないことを意味します。有効なiframeを取得できる唯一の方法は、親が継承を行うか、または論点ではない癖にあったかどうかです。

推奨読書

于 2010-09-15T13:58:09.420 に答える
2

MSDN で文書化された IE9 のソリューションについては、こちらの私の回答を参照してください: How to force Iframe to run quirks under a standardparent frame

つまり、親ページが IE9 モードでレンダリングされている場合、iframe で quirks モードをトリガーすることはできませんが、IE9 レンダリング エンジンに埋め込まれた「quirks モード エミュレーション」をトリガーすることは可能です。

JSBin デモ: http://jsbin.com/ozejuk/1/

さらに読む: http://msdn.microsoft.com/en-us/library/gg558056(v=vs.85).aspx

于 2013-03-22T05:47:09.073 に答える