私はすべてのイントラネットサイトで互換モードを強制するクライアントのために仕事をしています。互換モードを強制的にオフにするタグを私のHTMLに入れることができるかどうか疑問に思いました。
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<title>My Web Page</title>
</head>
<body>
<p>Content goes here.</p>
</body>
</html>
リンクされたMSDNページから:
エッジモードは、利用可能な最も高いモードでコンテンツを表示するようにWindows Internet Explorerに指示します。これは、実際には「ロックイン」パラダイムを破ります。 Internet Explorer 8では、これはIE 8モードと同等です。 Internet Explorerの(仮想の)将来のリリースがより高い互換モードをサポートしていた場合、Edgeモードに設定されたページはそのバージョンでサポートされている最も高いモードで表示されます。ただし、Internet Explorer 8で表示した場合、これらの同じページは依然としてIE 8モードで表示されます。
しかし、 "Edge"モードは本番環境では推奨されません。
Web開発者は、将来のバージョンのWindows Internet Explorerでページコンテンツをレンダリングすることで予想外の結果が生じる可能性があるため、テストモードページやその他の本番以外の用途にEdgeモードの使用を制限することを推奨します。
その理由を完全には理解できません。しかしこれによると、現時点で最善の方法はIE=8
を使うことです。
何時間もかけてこの問題をトラブルシューティングしました...これがX-UA-Compatible
のドキュメントから私たちを助けてくれたいくつかの簡単なハイライトです: http://msdn.Microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16
<meta http-equiv="X-UA-Compatible" content=" _______ " />
を使う
標準ユーザエージェント モード(エミュレートしないもの)はあなたのページの<!DOCTYPE>
ディレクティブを無視し、そのバージョンのIEでサポートされている標準に基づいてレンダリングします(例えば、IE=8
はテーブルに従うでしょう) IE=7
)よりもボーダの間隔といくつかの疑似セレクタ。
一方、 エミュレート モードはIEにあなたのページのあらゆる<!DOCTYPE>
ディレクティブに従うように指示し、標準モードをあなたが選択したバージョンに基づいてレンダリングし、IE=5
に基づいてモードを奇妙にします。
content
属性に指定できる値は次のとおりです。
content="IE=5"
content="IE=7"
content="IE=EmulateIE7"
content="IE=8"
content="IE=EmulateIE8"
content="IE=9"
content="IE=EmulateIE9"
content="IE=Edge"
イントラネットゾーンのページを操作している場合は、IE9が何をしてもIE7互換モードになっていることがわかります。
これは、IE Compatibility設定内の設定が原因で、すべてのイントラネットサイトが互換モードで実行されるべきであることを示しています。これをグループポリシーで解除することも(または、IEで単純に解除することも)、次のように設定することもできます。
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
これは(他の回答で詳述されているように)働きますが、最初はそうは見えないかもしれません: スタイルシートが宣言される前に来る必要があります 。そうでなければ、それは無視されます。
これでうまくいくと思います。
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
関連する質問に対するこの answer で示唆されているように、 "Edge"モードはWeb.Configファイルで設定できます。これにより、個々のページに挿入する必要なく、アプリケーションから返されるすべてのHTMLに適用されます。
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=Edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
これと同じ手順は、IISサーバー、Webサイト全体、または特定のアプリケーションに対して IIS Managerを使用して「HTTP応答ヘッダー」を変更する でも実行できます。
メタタグの解決策は私たちにはうまくいきませんでしたが、レスポンスヘッダでそれを設定することはしました:
header('X-UA-Compatible: IE=Edge,chrome=1');
私の最近の経験に基づいて、このトピックに関するもう少しだけメモを取ります。私はIE 8がすべてのイントラネットサイトで互換モードに設定されているノートパソコンで仕事をしています。私のサイトで提供されているページに対してこのモードを無効にするためにmetaタグを追加しようとしましたが、IEは常にこのタグを無視しました。 Lanceが彼の投稿で述べたように、レスポンスヘッダを追加することでこの問題は解決しました。これは、私がHTML5定型メソッドに基づいてヘッダーを設定する方法です。
<IfModule mod_headers.c>
Header set X-UA-Compatible "IE=Edge,chrome=1"
# mod_headers can't match by content-type, but we don't want to send this header on *everything*...
<FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webm|webp|woff|xml|xpi)$">
Header unset X-UA-Compatible
</FilesMatch>
</IfModule>
このヘッダを実際に送信するには、Apacheでmod_headersを有効にしておく必要があります。このmodが有効になっていることを確認したい場合は、phpを実行できるページにこれを入れてください。
<pre>
<?php
print_r(Apache_get_modules());
?>
</pre>
IE8のデフォルトは、intERnetでは標準モード、intRAnetではQuirksモードです。 doctypeがxhtml transitionalに設定されている場合、HTMLメタタグは無視されます。解決策は、コードにHTTPヘッダーを追加することです。これは私達のために働いた。現在、私たちのイントラネットサイトはIE8にアプリを標準モードでレンダリングすることを強制しています。
基本ページクラス(ASP.net C#)のPageInitに追加されました:
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
参照: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html
これは、IE Compatibility設定内の設定が原因で、すべてのイントラネットサイトが互換モードで実行されるべきであることを示しています。これをグループポリシーで解除することも(または、IEで単純に解除することも)、次のように設定することもできます。
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
互換表示設定をグループポリシーとして変更することはできないようですが、レジストリで変更できる可能性があります。このメタタグは私には問題なく動作します。必須属性をHTMLフォームの一部として機能させる必要があります。 、それはクロムとFirefoxでは機能しましたが、IEでは機能しませんでした。
これは、ブラウザが個々のhtml 5要素をサポートしているブラウザの外観です。
Google Chromeの共通点の1つに注目してください。これはすべてをサポートしています。これが助けになることを願っています
タグの下の最初の項目として挿入します。
これはIEがページを物理的なバージョンのIEで表示することを強制し、ブラウザの「モード設定」を無視します。これは開発者ツールで設定することができます、それをテストするためにIEの古いバージョンに変更してみてください。これは無視され、ページはまったく同じに見えるはずです。
サーバーにアクセスできる場合、これを行うための最も信頼性の高い方法は、IIS内のサーバー自体で行うことです。 IIS HTTP応答ヘッダーに進みます。名前を追加:X-UA-Compatible
値:IE = Edgeこれはあなたのブラウザとあなたのコードを上書きします。
各Webページに選択したコンテンツをロードしてasp.netを使用したい場合。 Views> shared> Layout.cshtmlで見出しタグの下の最初のタグとして適用するだけです。
ちょっとしたヒント