web-dev-qa-db-ja.com

IE10はIE7モードでレンダリングします。標準モードを強制する方法は?

Microsoftのサイトでは、単純なdoctype宣言で十分であると主張しています。しかし、これほど短いドキュメントでもIE7モードにフォールバックします。

<!DOCTYPE html>
<html>
<head>
   <title></title>
</head>
<body>

</body>
</html>

http://d.pr/i/fvzb+

121
firedev

Internet Explorerは、ほとんどのWebページが以前のバージョンのIEを対象に書かれていると仮定し、Doctype、メタタグ、およびHTMLを見て、最適な互換モードを決定します(誤っている場合があります)。 HTML5 doctypeを使用しても、イントラネットサイトの場合、IEは引き続きWebサイトを互換モードにします。

ウェブサイトが常に最新の標準モードを使用するようにするには、Display intranet sites in Compatiblyがオフになっていることを確認します。ただし、Webサーバーに対してローカルな各マシンでこれを行う必要があります(手順は以下にあります)。

または、X-UA-Compatibleヘッダーを使用してサーバーからこれをオフにすることもできます。 メタタグの使用は機能しないことに注意することが重要です!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

MSDN全体を通して、Hostヘッダーまたはメタタグを使用すると、intranet sitesでさえオーバーライドする必要があると述べられています。記事 Internet Explorer 8の互換モードについて は次のように述べています。

多数の社内ビジネスWebサイトがInternet Explorer 7向けに最適化されているため、このデフォルトの例外はその互換性を維持します。 ...メタタグまたはhttpヘッダーを使用してドキュメントに互換モードを設定すると、これらの設定が上書きされます。

ただし、実際にはこれは機能しません。動作する唯一のオプションはHostヘッダーを使用することです。記事のコメントセクションには、この正確な問題の多くの例も示されています。

メタタグの使用には、<head>タグのすぐ下にない場合や、その前にデータが多すぎる場合(4k)にタグを無視するなど、いくつかの他の問題もあります。また、いくつかのバージョンのIEでドキュメントが再解析され、レンダリングが遅くなる場合があります。これらの問題の詳細については、MSDNの記事をご覧ください ベストプラクティス:HEADを順番に取得してください

X-UA-Compatibleヘッダーの追加

.netとIISを使用している場合、これをweb.configに追加できます。プログラムでこれを行うこともできます。

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-UA-Compatible" value="IE=Edge" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

IISを使用していない場合は、どの言語でも簡単に実行できます。たとえば、phpで実行する方法は次のとおりです。

header('X-UA-Compatible: IE=Edge');

X-UA-Compatibleヘッダーがhtml5 doctypeに存在する限り、サイトは常に最新の標準モードで実行されます。

互換表示をオフにする
互換表示をオフにすることは依然として有用です。これを行うには、互換表示設定でDisplay all intranet sites in compatibility viewのチェックを外します。

Compatibility View Settings

これを呼び出すには、altを押してメニューを取得します。

enter image description here

Editこの回答はIE9にも関係します

243
Daniel Little

これは私のために働く。

<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
25
JGilmartin

次のタグをヘッドに追加してみてください

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />
10
Jeow Li Huan

メタタグはイントラネットサイトに対して何もしません。私の問題はIE10互換モードでのIE10レンダリングでした。私にとってこの問題に取り組んだのは、 @ Jeow's answer をさらに進め、IISの下のweb.configに以下を追加することでhttpヘッダーでその値を使用することでした。

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=Edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

IEの目的で、イントラネットサイトには、外部にルーティングされない公開サイトが含まれます。たとえば、オフィスで働いているStackoverflowの従業員は、おそらく互換モードでstackoverflow.comを見るでしょう。

2
o.v.

私が次のことをしたとき、それは私にとって完璧に働いた:

オン http://msdn.Microsoft.com/en-us/library/gg699338(v = vs.85).aspx

最初のボックスで提供されている正確な例を使用し(下部に欠落している</html>を追加)、IE10で開き、標準が強制されました。

私の提案は、空のコードを実際のコンテンツ(単純なもの)に置き換えて、その機能を確認することです。

1
ZacNespral21