web-dev-qa-db-ja.com

イントラネット互換モードIE8をオーバーライドする

デフォルトでは、IE8はイントラネットWebサイトを強制的に互換モードにします。メタヘッダーをIE8に変更しようとしましたが、メタヘッダーを認識せず、ブラウザー設定のみを使用します。誰もこれを無効にする方法を知っていますか?

200
sanpall

イントラネットの互換モードをオーバーライドすることは可能です。

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')
224
Andras Csehi

マイケル・イリゴイエンは正しいですが、もう少し複雑です...

paul Irishのすばらしい定型文を使用している場合、次のようなものがあります。

<!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">

基本的に、<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">ステートメントの前に条件付きIEコメントをトリガーすると、デフォルト設定でIE9を実行している場合、イントラネット環境で互換モードに強制されます。

更新—追加情報:しかし、HTML5ボイルプレートを機能させるトリックがあることに注意してください:

空の条件付きコメントを追加しますbefore DOCTYPE。また、thatを実行すると、alsoX-UA-Compatibleディレクティブの周りに条件付きコメントを追加して、ページを作成できることにも注意してください。 HTML5も有効です。したがって、たとえば:

<!--[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の前の条件付きコメントをsemi条件付きコメントに置き換えることもできます条件なし<!--[]-->。したがって、次のようになります。

<!--[]-->
<!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>)は、たとえば 別の質問に対するこの回答 で説明されているように、それをサポートすることのないレガシーIEバージョンの場合、 X-UA-Compatioble(読み取り:IE7およびIE6用)—ブラウザーをquirksモードにします。

84
Andrew

[ツール]メニューをプルダウンし、[互換表示設定]を選択した場合、ダイアログの下部にある設定は[互換モードでイントラネットサイトを表示する]です。これをオフにすると問題が解決し、IEはDOCTYPEに基づいたモードを使用します。

34
PilotBob

この質問に対する答えには、ある程度の混乱があります。

一番の答えは現在、httpヘッダーにフラグを設定するサーバー側のソリューションであり、いくつかのコメントはメタタグを使用するソリューションが機能しないことを示しています。

このブログエントリは、互換性メタ情報の使用方法の素晴らしい概要を提供し、私の経験では次のように動作すると思います: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/ using-x-ua-compatible-to-create-durable-enterprise-web-applications.aspx

主なポイント:

  • メタタグを使用して情報を設定し、ヘッダーで両方とも機能
  • メタタグはヘッダーよりも優先されます
  • メタタグは、ブラウザがヒューリスティックに基づいてレンダリングエンジンを決定しないようにするために、最初のタグである必要があります

1つの重要な点(およびこの点から多くの混乱が生じると思います)は、IEには2つのモードの「クラス」があるということです。

  1. 文書モード
  2. ブラウザモード

ドキュメントモードによってレンダリングエンジンが決まります(Webページのレンダリング方法)。

ブラウザモードは、どのユーザーエージェント(UA)文字列IEがサーバーに送信するか、ドキュメントモード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を要求したときです。これらのエミュレートモード自体が決定です。だから、あなたが望むものに特定するのではなく、2つのことの1つを求めてから、DOCTYPEのコードの他の場所を見て、その2つのことのどちらかを決定します(そして、そのDOCTYPEがあなたに標準を与えるかどうかを理解しようまたはその内容に応じた癖-時には混乱を招く別のタスク)。それよりも、それ自体が質問である応答を与えるよりも、あなたが望むものを直接指定するほうが有意義だと思います。 IE7標準が必要な場合は、IE = EmulateIE7ではなくIE = 7を使用します。 (これは、DOCTYPEを使用しないことを意味するものではないことに注意してください。

19
stefan.s

このメタタグを試してください:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

「イントラネットまたはすべてのWebサイトのいずれかで」「イントラネットサイトを互換表示で表示する」がチェックされている場合でも、IE8をIE8標準モードとしてレンダリングする必要があります。IE 8.0.6で試しました。

9
Ala' Alnajjar

システム管理者は、組織のチェックボックスをグローバルにオフにすることでこの問題を解決しました。ユーザーはログオフする必要さえありませんでした。

enter image description here

7
James Lawruk

チェックしたイントラネット互換表示を上書きできる実用的な答えを見つけました。この行をページのOnInitイベントに追加するだけです(metaまたはweb.config customHeaderは不要です)。

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
4
Cyrille Perrot

最初のメタタグだけでなく、最初のタグとして、ヘッドセクションで最初のタグとしてメタタグを指定することにより、互換モードをオーバーライドできました。 。

@ stefan.sのすばらしい回答で私にそれを教えてくれてありがとう。私が持っていることを読む前に:

このDIDは機能しません

<head> 
<link rel="stylesheet" type="text/css" href="/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >

リンクタグを邪魔にならないように移動し、それが働いた

この作品

<head><meta http-equiv="x-ua-compatible" content="IE=9" >

そのため、互換性を使用するように設定されたIE8クライアントは、ページをIE8標準モードとしてレンダリングします。content= 'IE = 9'は、IE9までの利用可能な最高の標準を使用することを意味します。

3
PeteS_UK

ヘッダーに次を入力してみてください。

<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

礼儀 Paul IrishのHTML5 Boilerplate (ただし、XHTML Transitionalでも機能します)。

3
Gabe

これは正確な解決策ではありませんが、最高の解決策だと思います。イントラネットサイトでは、Firefoxからしかアクセスできないことを人々に伝えています。このあたりのIEユーザーには親切ではありません。サーバーまたはクライアント側のユーザーエージェントを確認し、IEからのアクセスを拒否します。そして、私は.NETプログラマーです。

2
Caimen

私はこの問題に苦労し、独自のソリューションと洞察を提供したいと考えていました。

特定のAJAXベースのフレームワークは、<head>の先頭にJavaScriptとスタイルシートを挿入します。これを行うと、確立されたメタタグソリューションが適切に機能しなくなるようです。この場合、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 {
}

}
1
maple_shaft

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)を介してこの問題を解決する方法について説明します。

1
JackSparrow

すべてのユーザーに対してGPOを介してこれを無効にするためにこれを読んでいる人にとっては、これは設定です:

コンピューターの構成/管理用テンプレート/ Windowsコンポーネント/ Internet Explorer /互換表示/ローカルイントラネットのInternet Explorer標準モードを有効にする

web.configの編集で修正されましたが。

0
Schrodo_Baggins

この質問は イントラネットの「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( "Trident")!=- 1){
 //うそつき、これは互換モードのIE8です。
 isIE8 = true; 
} 
0
mhenry1384

これをページのヘッドタグ内に追加します(必要なIEバージョンを対象としています)。

<meta http-equiv="X-UA-Compatible" content="IE=8" />  

注意、これはブラウザが互換モード(ブラウザモードと呼ばれる)でそれを言うという事実を変更しませんが、ページwillIE8標準モードでレンダリングします。それでも希望どおりにレンダリングされない場合は、おそらくあなたが誤ってI.Eをチェックしている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 }
0
n00b

ドキュメントモードとブラウザモードについての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タグがブラウザーテストに反映されます。

なぜブラウザをテストするような眉をひそめているのですか?速度。 IE6/7では、tablesorterなどの私のjQueryアドインの多くが遅すぎるので、それらを無効にします。それ以外の場合、ブラウザ機能のテストがこれを解決するのに役立つかどうかはわかりません。

0
Herc

WebサイトでIE 8標準モードを強制する場合、有効なDOCTYPEと共にこのメタタグを使用します。

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />

プレーンな「IE8」ではなく、「EmulateIE8」の値に注意してください。

IE devsによれば、これは「IE8標準モードで標準DOCTYPEを表示します。Quirksモードで互換DOCTYPEを表示します。このタグを使用して、クライアントマシンの互換表示をオーバーライドし、標準をIE8標準に強制します。」

このIEブログ投稿の詳細: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx

0
ashtonium

同じ問題がありました。それを使用して働いた

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
0
Sandro