読む前に:
記事の具体的な内容を読む前に、まず IE8 を開いてhttp://www.taobao.comを開いて、アドレス バーに次のように入力してください。
javascript:alert(document.documentMode +navigator.userAgent);void(0)
この結果を見て驚かれたかどうかはわかりませんが、とにかく、ページのメタに互換性タグがなく、フィドラーがチェックするときに http ヘッダーに X-UA-Compatibility タグがないため、非常に奇妙に感じます。いったいなぜ Web サイトはIE7モードで動作するのでしょうか?
IE7互換モードと互換ビュー
昨日、口コミでiframe の適応性が高いという記事を読んでいたところ、そのデモが IETester7 でのオンラインの結果と明らかに異なることが分かりました。メタに互換性マークがない場合、フィドラーは http ヘッダーに X-UA-互換性マークがないことを確認しますが、オンラインの結果がローカルの結果と異なるのはなぜですか?落ち込んでしまったのですが、改めて見てみると、IE8では「互換表示」ボタンが表示されなかったのです。
その後、 「Just The Facts: Recap of Compatibility View」という記事を見つけました。問題は解決しませんでしたが、内容は素晴らしかったので、その一節を引用したいと思います。
互換表示と X-UA-互換タグは同等ではありません
互換表示はクライアント上で行うもので、ユーザー エージェント文字列、バージョン ベクトル (条件付きコメントの評価に使用)、標準をトリガーする DOCTYPE のモード (IE8 標準または IE7 標準) の 3 つに影響します。 -UA 互換の <META> タグ/ヘッダーは、ページ コンテンツ/サーバー側で使用するもので、存在する場合、クライアントの互換表示設定を完全にオーバーライドします。これは、バージョン ベクターと標準をトリガーするモード DOCTYPE の 2 つに影響します。これを変更するにはすでに遅すぎるため、UA 文字列には影響しません。クライアントはすでにサーバーに対して GET リクエストを行っています (そして、そのリクエストには UA 文字列が含まれています)。これは、サイトがピボットされた場合に意味します。ユーザー エージェント文字列に、(IE8 にサイトを IE7 標準モードで表示させるための) X-UA-互換タグを追加するだけでは、Web サイトに互換性はありません。ユーザー エージェント文字列検出ロジックも更新する必要があります。良い。
これは、互換性ビューが 3 つの役割を果たすことを意味します。
メタ タグは 2 つの役割のみを果たします: 1. バージョン、2. ドキュメント タイプ
(ここでは、メタ タグは UserAgent に影響を及ぼさないと言われています。メタ タグはサーバー側の ua を参照する必要があります。クライアント リクエストは送信されており、ua が含まれているため、影響を受けません。ただし、クライアントの ua は依然として影響を受けてie7が表示されます。)
正しい:
(前のテストが間違っていた可能性があります) クライアントの ua は影響を受けません。document.documentMode にのみ影響します。
加えて:
<META> タグ/ヘッダーはそれぞれ、<meta http-equiv="X-UA-Practical" content="IE=EmulateIE7"> と、サーバー側 (.net 構成ファイルなど) での http ヘッダーの追加を指します。
さらに、http ヘッダーを IIS または Apache に追加することもできます。
問題解決
現時点では、この記事の冒頭の問題はまだ解決されていません。昨夜、 doctype を使用してブラウザ モードを有効にすることに関するQin Ge の記事を偶然目にしました。そこには、Microsoft のブラックリスト サイト リストでも互換モードが有効になると記載されていました。上記の記事 2 つのコメントのうちの 1 つは、res://iecompat.dll/iecompatdata.xml (IE8 のみ) です。このアドレスを IE8 に入力すると、互換表示リストが表示されます。このリストには Koubei と Taobao の名前が含まれているため、これがこの記事の冒頭の質問に対する答えになると思います。このリストでドメイン名を見つけて開き、冒頭に JavaScript を入力することもできます。アドレス バーの記事 (追記: Microsoft にはリストが多すぎます) により、非常に多くのサイトが IE7 に変換されます。
<構成>
<システム.ウェブサーバー>
<httpプロトコル>
<カスタムヘッダー>
<クリア />
<add name="X-UA-互換性" value="IE=EmulateIE7" />
</customHeaders>
</httpプロトコル>
</system.webServer>
</設定>