デフォルトでは、IE8 はイントラネット Web サイトを強制的に互換モードにします。メタ ヘッダーを IE8 に変更しようとしましたが、メタ ヘッダーを認識せず、ブラウザーの設定を使用するだけです。これを無効にする方法を知っている人はいますか?
19 に答える
イントラネットで互換モードをオーバーライドすることができます。
IIS の場合、以下のコードを web.config に追加するだけです。IE9で私のために働いた。
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Apache に相当:
Header set X-UA-Compatible: IE=Edge
そしてnginxの場合:
add_header "X-UA-Compatible" "IE=Edge";
そして、express.js の場合:
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyen は正しいですが、もう少し複雑です...
ポール・アイリッシュの素晴らしいボイラープレートを使用している場合は、次のようなものになります:-
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
これは期待どおりに機能せず、[イントラネット サイトを互換表示で表示する] がオンになっている場合、イントラネット環境で IE を強制的に互換モードにします。イントラネット互換モードを防止するには、IE の条件付きコメントを削除する必要があります。
したがって、次のコードが機能します。
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
基本的に、ステートメントの前に条件付き IE コメントをトリガーすると、既定の設定で IE9 を実行している場合、イントラネット<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
環境で強制的に互換モードになります。
更新 — 追加情報: ただし、HTML5 ボイルプレートを機能させるトリックがあることに注意してください。
DOCTYPE の前に空の条件付きコメントを追加します。また、それを行うと、ディレクティブの周りに条件付きコメントを追加して、ページを HTML5 にも有効にすることもできます。X-UA-Compatible
たとえば、次のようになります。
<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
この回答の最初の部分に触発されたブログ投稿には、詳細があります。ところで、そのブログ投稿で述べたように、DOCTYPE の前の条件付きコメントを条件なしの半条件付きコメントに置き換えることもできます: 。したがって、次のようになります。<!--[]-->
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
ただし、後者のバリアント ( <--[]--><!DOCTYPE html>
) は、たとえば別の質問へのこの回答X-UA-Compatioble
で説明されているように、 (IE7 および IE6 の場合)をサポートしていないレガシー IE バージョンの場合、ブラウザを癖モード。
「ツール」メニューをプルダウンして「互換表示設定」を選択すると、そのダイアログの下部に「互換モードでイントラネット サイトを表示する」という設定があります。これをオフにすると問題が解決し、IE は DOCTYPE に基づくモードを使用します。
この質問への回答には、ある程度の混乱があります。
一番の答えは現在、httpヘッダーにフラグを設定するサーバー側のソリューションであり、いくつかのコメントは、メタタグを使用したソリューションが機能しないことを示しています。
このブログ エントリは、互換性メタ情報の使用方法の優れた概要を示していると思います。私の経験では、次のように機能します 。 ua-compatible-to-create-durable-enterprise-web-applications.aspx
主なポイント:
- メタタグを使用して情報を設定し、ヘッダーで両方とも機能します
- メタタグはヘッダーよりも優先されます
- ブラウザがヒューリスティックに基づいてレンダリング エンジンを決定しないようにするため、メタ タグは最初のタグにする必要があります。
1 つの重要な点 (そして、この点から多くの混乱が生じると思います) は、IE には 2 つの「クラス」のモードがあることです。
- ドキュメントモード
- ブラウザモード
ドキュメント モードは、レンダリング エンジン (Web ページのレンダリング方法) を決定します。
ブラウザー モードは、IE がサーバーに送信するユーザー エージェント (UA) 文字列、IE の既定のドキュメント モード、および IE が条件付きコメントを評価する方法を決定します。
ドキュメント モードとブラウザー モードの詳細については、http: //blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site-developers.aspx?Redirected=true
私の経験では、互換性メタデータはドキュメント モードにのみ影響します。したがって、ブラウザの検出に依存している場合、これは役に立ちません。ただし、機能検出を使用している場合は、これが最適です。
したがって、次の構文を使用して (html ページで) メタ タグを使用することをお勧めします。
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
注意: テストしたブラウザ モードのリストを提供してください。
このブログ投稿では、EmulateIEX の使用に対するアドバイスも行っています。ここに引用:
そうは言っても、アプリケーションが EmulateIE7 または EmulateIE8 を要求するとき、私が奇妙に思うことの 1 つです。これらのエミュレート モード自体が決定事項です。つまり、具体的に何を求めているかというのではなく、2 つのうちの 1 つを要求し、コード内の別の場所で DOCTYPE を探して (そして、その DOCTYPE が標準を提供するかどうかを理解しようとすることで)、それらの 2 つのうちのどちらかを判断します。またはその内容に応じて癖 – 別の時々混乱するタスク)。それよりも、それ自体が質問である回答をするよりも、あなたが望むものを直接指定する方がはるかに理にかなっていると思います. IE7 標準が必要な場合は、IE=EmulateIE7 ではなく、IE=7 を使用してください。(これは、DOCTYPE を使用してはならないという意味ではないことに注意してください。使用する必要があります。)
このメタタグを試してください:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
「互換ビューでイントラネットサイトを表示する」がチェックされていても、IE8は強制的にIE8標準モードとしてレンダリングされるはずです[イントラネットまたはすべてのWebサイトのいずれか]、IE 8.0.6で自分で試しました
システム管理者は、組織のチェックボックスをグローバルにオフにすることで、この問題を解決しました。ユーザーはログオフする必要さえありませんでした。
チェック済みのイントラネット互換表示を上書きできる有効な回答が見つかりました。ページの OnInit イベントに次の行を追加するだけです (meta または web.config customHeader は必要ありません)。
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
ヘッダーに次を入れてみてください。
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Paul Irish の HTML5 Boilerplate の厚意による(ただし、XHTML Transitional でも機能します)。
これは正確な解決策ではありませんが、最善の解決策だと思います。私たちのイントラネット サイトでは、Firefox からしかアクセスできないと人々に伝えています。サーバーまたはクライアント側のユーザー エージェントを確認し、IE からのアクセスを拒否します。私は .NET プログラマーです。
私はこの問題に苦労しており、独自のソリューションと洞察を提供したいと考えていました。
特定の AJAX ベースのフレームワークは、javascript とスタイルシートを最初に挿入します<head>
。これを行うと、確立されたメタ タグ ソリューションが適切に機能しなくなるようです。この場合、Andras Csehi の回答と同じように、HTTP 応答ヘッダーに直接挿入すると問題が解決することがわかりました。
ただし、Java サーブレットを使用している私たちにとって、これを解決する良い方法は、ServletFilter を使用することです。
public class EmulateFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletResponse response = ((HttpServletResponse)arg1);
response.addHeader("X-UA-Compatible", "IE=8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
RequestInterceptor メソッドに 1 行を追加することで、Spring-Apache-tomcat 環境でこの問題を解決できます。
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
// Some logic
// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8");
return true;
}
参照元 -フィルターを作成して応答ヘッダーを変更する方法 RequestInterceptor (Spring) を介してこの問題を解決する方法について説明します。
WebサイトでIE8標準モードを強制する場合は、このメタタグを有効なDOCTYPEと一緒に使用します。
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
プレーンな「IE8」ではなく、「EmulateIE8」の値に注意してください。
IEの開発者によると、これは「IE8標準モードで標準DOCTYPEを表示します。QuirksモードでQuirks DOCTYPEを表示します。このタグを使用して、クライアントマシンの互換表示をオーバーライドし、標準をIE8標準に強制します。」
このIEブログ投稿の詳細:http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
これをページのヘッドタグ内に追加します(必要なIEバージョンをターゲットにします)。
<meta http-equiv="X-UA-Compatible" content="IE=8" />
これにより、ブラウザが互換モード(ブラウザモードと呼ばれる)で表示するという事実は変わりませんが、ページはIE8標準モードでレンダリングされることに注意してください。それでも希望どおりにレンダリングされない場合は、IEのバージョンを誤ってチェックしているjavascriptがあることが原因である可能性があります。メタX-UA-Compatibleタグを設定した場合でも、ユーザーエージェント文字列にはMSIE 7.0と表示されるため、キーオフする必要があるプロパティを決定するには、次のブログ投稿を参照してください。
私の場合、修正のためにIE7互換モードのチェックを追加する必要がありました。私は単純なjavascriptコードを使用してそうしました:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
ドキュメント モードとブラウザ モードに関する Stefan S のコメントは、私の問題に非常に適切でした。
ページに X-UA-Content メタ データがありますが、クライアント側でnavigator.appVersion
. このテストは、ドキュメント モードではなくブラウザ モードを指定しているため、メタ データを反映しません。
私にとっての答えは、次のdocument.documentMode
ようなものをテストすることでした:
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
これで、メタ X-UA-Content タグがブラウザー テストに反映されます。
なぜ私はブラウザをテストするような眉をひそめることをするのですか? スピード。tablesorter などのさまざまな jQuery アドインは、IE6/7 では遅すぎるため、無効にしたいと考えています。ブラウザー機能のテストが、そうでなければこれを解決するのに役立つかどうかはわかりません。
これを読んで、すべてのユーザーに対して GPO を介してこれを無効にしようとしている他の人にとって、これは設定です。
コンピューターの構成/管理用テンプレート/Windows コンポーネント/Internet Explorer/互換表示/ローカル イントラネットの Internet Explorer 標準モードを有効にする
web.configの編集で修正されましたが。
この質問は、「イントラネットで "Internet Explorer 8" ブラウザー モードを強制する」の重複です。
そこの応答は、(サーバー側で) 互換性ビューを無効にすることはできないことを示しています - https://stackoverflow.com/a/4130343/24267。私が試した提案はどれもうまくいかなかったので、確かにそうです。IE8 では、送信する X-UA-Compatible ヘッダーの種類に関係なく、「ブラウザー モード」が Internet Explorer 8 互換ビューに設定されます。
IE7 と互換モードの特別な処理を行う必要がありました。これにより、ブラウザーは IE8 を使用してレンダリングされましたが、IE7 であると報告され、コードが壊れました。これは私がコードを修正した方法です(これは恐ろしいハックであることを認識しており、ブラウザのバージョンではなく機能をテストする必要があります):
isIE8 = navigator.appVersion.indexOf("MSIE") != -1 && parseFloat(navigator.appVersion.split("MSIE")[1]) == 8; if (!isIE8 && navigator.appVersion.indexOf("MSIE") != -1 && parseFloat(navigator.appVersion.split("MSIE")[1]) == 7 && navigator.appVersion.indexOf("トライデント") != -1) { // うそつき、これは互換モードの IE8 です。 isIE8 = 真; }
同じ問題がありました。を使用して動作しました
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
.htaccess のヘッダーを変更する
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
ここでこの問題の解決策を見つけました: https://github.com/h5bp/html5-boilerplate/issues/378