2

ページ「X」(親)のiframeにページ「Y」があります。

ページ X には http ヘッダーがあります: `X-UA-Compatible IE=EmulateIE7`
メタタグなし
doctype : `DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"`
ページ Y には http ヘッダーがあります: `X-UA-Compatible IE=EmulateIE7`
`meta http-equiv="X-UA-Compatible" content="IE=8"` というメタ タグがあります。
doctype : `DOCTYPE html`

IE8 ブラウザーの IE7 標準モード (つまり、ブラウザー モード: ie8、ドキュメント モード: IE7 標準モード) でレンダリングされた同じページと比較して、IE7 ブラウザーでレンダリングされたときのページ Y には、いくつかの動作の違いが見られます。

この js を実行してみましjavascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.')た 、「標準モード」と表示されます。

しかし、ページが異なる方法でレンダリングされているため、ヘッダーの不一致が原因で奇妙なモードが導入されていると考える傾向があります。

動作の違いが正常かどうかを知りたいのですが、そうであればなぜですか?

PS: 動作の違いによると、jquery グリッドの行にカーソルを合わせると、td の 1 つの画像が消えますが、IE7 では正常に動作します。

4

1 に答える 1

4

IE8 ブラウザーの IE7 標準モードでレンダリングされた同じページと比較して、IE7 でレンダリングされたページに違いはありますか?

直接的な答え: はい、あります。この 2 つには既知の違いがあるため、互換モードを使用して IE のバージョン テストを行うのは良くないと考えられています。

問題は、「互換モード」が実際には IE7 レンダリング エンジンを使用していないことです。IE8 レンダリング エンジン (または使用している IE バージョン) を使用していますが、IE7 を模倣するように動作を変更するように内部スイッチが設定されています。似ているように設計されていますが、同じエンジンではなく、すべての場合で同じように動作するわけではありません。

数年前、IE8 の IE7 モードのバグの 1 つにひどく巻き込まれました。何が起こっているのかを突き止めるまで、開発者がデバッグしようとして数日分の時間を失いました。

唯一の正気の解決策は、互換モードを絶対に避けることです。X-UA-Compatibleフラグを に設定しIE=edgeます。IE のすべてのバージョンで、利用可能な最善のモードを強制的に使用します。

互換モードは、既存のコードを使い続けたいサイトを対象としています。IE のバージョンをアップグレードしたいが、コードを修正する時間がない。残念ながら、compattiblity モードのバグは、アップグレードされた IE バージョンで動作するようにコードを修正するだけで実際にはより簡単になるようなものです。

ところで、あなたは「Quirksモード」についての質問とタグで言及しました. 表示されているのはQuirks モードではないことを理解することが重要です。奇妙な動作かもしれませんが、実際には Quirks モードではありません。Quirks モード自体はまったく別のものです (これは基本的に IE5 互換モードであり、実際にはそれは望ましくありません)。DOCTYPE が欠落しているか無効であることが原因で発生しますが、有効な DOCTYPE を使用しているので問題ありません。

于 2013-11-04T17:08:25.087 に答える