イントラネット互換モードIE8を上書きする


200

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



2
これをページのヘッドタグ内に追加します:<meta http-equiv = "X-UA-Compatible" content = "IE = 8" />(必要なIEバージョンを対象とします)。これは、ブラウザーが互換モード(ブラウザーモードと呼ばれます)であると言う事実を変更することはありませんが、ページはIE8標準モードでレンダリングされます。IE8以降をチェックする場合は、「トライデント」をチェックするようにJavaScriptを変更する必要があります。参照:blogs.msdn.com/b/mikeormond/archive/2008/09/25/...
N00B

@ n00b-これは私のサイトには影響しません。
ピート

私の理解は、メタタグがヘッドタグの直後になければならないということです。一部のスクリプトがインデックス0の先頭に挿入されることに気付きました。したがって、メタタグは頭の後ろではなくなります。
AMissico

回答:


224

イントラネットの互換モードを無効にすることができます。

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')

20
これが正解です。メタタグは何もしませんが、応答ヘッダーの追加は機能します。詳細:social.msdn.microsoft.com/Forums/is/iewebdevelopment/thread/...
russau

3
同意します。これは、このWebサイトのみのイントラネット設定を正しく上書きするため、正しい答えになるはずです。
エンリケイン、2011

9
(明確にするため:ドキュメントモードでは機能しますが、ブラウザーモードでは機能しません)
codeulike

21
これは正解ではありません。この回答はドキュメントモードを変更しますが、重要な「ブラウザモード」は変更しません。私はまだその問題の解決策を探しています。
DeveloperChris

4
.net固有であるため、これは正しい答えではありません(事実を認めることさえありません)。
Daddy32、2013

84

Michael Irigoyenは正しいですが、少し複雑です...

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ボイルプレートを機能させるトリックがあることに注意してください。

DOCTYPEの前に空の条件付きコメントを追加します。あなたが行うときとノートだけでなくとして、ということを、あなたはできる周りの条件付きコメントを追加するX-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の前の条件付きコメントを、条件なしの半条件付きコメントに置き換えることもできます<!--[]-->。したがって、そのように:

<!--[]-->
<!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バージョンの場合、ブラウザを癖モード。


これで問題が解決しませんでした。ただし、参考までに、「X-UA-Compatible」をヘッダーDIDとして追加すると問題が解決します。
スコットリッピー

34

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


19
私は反対投票はしませんでしたが、ユーザーの視点(ユーザーがすべきこと)から答えたからだと思います。この質問はWeb開発者からのものであり、ユーザーが特に何もしなくても問題を修正する方法を尋ねています。
ロイティンカー、

1
さらに、これは古いアプリケーションとの互換性を維持することを可能にしません。この設定をオフにすると、古いアプリが更新されずに壊れる可能性があります。イントラネット上の他のすべてのアプリで互換モードのチェックボックスをオンにする必要がある場合、質問者は標準モードを強制する方法を探していると思います。
Andrew Lewis

2
私は彼がプログラマーの観点から答えたと思います。「... IEはDOCTYPEに基づくモードを使用します」。参照:msdn.microsoft.com/en-us/library/ms535242%28VS.85%29.aspx 会社がActive Directoryを実行している場合、ブラウザ設定の変更は管理者によって伝達される可能性があります。FireFoxでそれを行うことはできません!
Nate Zaugg、2010年

@AndrewLewisたぶん。ただし、URLバーには互換モードボタンがあり、その特定のサイトに対して互換モードを使用するようにブラウザーを設定します。または、ダイアログで手動で追加することもできます。繰り返しになりますが、これはITによってグローバルに行うことができます。
PilotBob 2013

2
@PilotBobには、12万人以上のユーザーがいて、サポートするイントラネットサイトが(数千ではないにしても)数百ある場合、これは実行可能なソリューションではありません。
ヨーク

19

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

一番上の答えは現在、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ページのレンダリング方法)。

ブラウザモードは、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の使用を禁止しています。ここに引用:

そうは言っても、私が奇妙だと思うことの1つは、アプリケーションがEmulateIE7またはEmulateIE8を要求するときです。これらのエミュレートモードは、それ自体が決定です。したがって、あなたが望むものを特定するのではなく、2つのことの1つを求め、DOCTYPEのコードの他の場所を探して、これら2つのことのどちらかを決定します(そして、そのDOCTYPEが標準を与えるかどうかを理解しようとしますまたはその内容に応じて奇妙な–別の時々混乱するタスク)。それを行うのではなく、それ自体が質問である応答を与えるよりも、あなたが望むものを直接指定するほうがはるかに理にかなっていると思います。IE7標準が必要な場合は、IE = EmulateIE7ではなく、IE = 7を使用してください。(これは、DOCTYPEを使用してはならないという意味ではありません–使用する必要があります。)


ブラウザモードを変更するには?
Vishnudev K 2014

ブラウザモードの文が混乱している
Justice Fist

@JusticeFistはい、ありがとうございます。改善してみました。
stefan.s 2014

1
@VishnudevK私が知っている唯一の方法は、開発者ツールを使用することです。しかし、おそらくプログラムによる解決策が必要です。
stefan.s 2014

9

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

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

[互換性ビューにイントラネットサイトを表示する]がオンになっている場合でも、IE8をIE8標準モードとして強制的にレンダリングする必要があります(イントラネットまたはすべてのWebサイトの場合)、IE 8.0.6で試してみました


15
いいえ、違います。
Dennis C

11
これは実際には正しいですが、ページ上のすべてのMETAタグの前に表示する必要があります。そうしないと機能しません。
Michael Irigoyen、2011

2
これは私にはうまくいきません。私の知る限りIE8s「互換モードでの表示イントラネットサイト」を言うことができるように非overrideableある
codeulike

6
(明確にするため:ドキュメントモードでは機能しますが、ブラウザーモードでは機能しません。したがって、レンダリングは修正されますが、ブラウザーはIE7のふりをします)
codeulike

7

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

ここに画像の説明を入力してください


1
イントラネット上のすべてのサイトが最新のWeb標準を使用できる場合、このソリューションは完全に機能します。しかし、一部の人ができない場合、この方法は不注意でそれらを壊します...私は注意してアプローチします。
ᴍᴀᴛᴛʙᴀᴋᴇʀ

4

チェックしたイントラネット互換ビューを上書きできるようにする実用的な答えを見つけました。次の行をページのOnInitイベントに追加するだけです(metaまたはweb.config customHeaderは必要ありません)。

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

1
開発プラットフォーム固有の答え...プラットフォームを指定することすらありません。Visual Studio .NETについて話していると思いますか?'OnInit'イベントが存在しないことがわかる限り(JavaScript、Java、PHPなどで)
Stijn de Witt


3

最初のメタタグだけでなく、VERY FIRST TAGとしてのみ、headセクションでメタタグをTHE FIRST TAGとして指定することで、互換モードをオーバーライドできました。

あなたの素晴らしい答えで私をそれに入れてくれた@ stefan.sに感謝します。それを読む前に、私は:

これは機能しませんでした

<head> 
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/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までの使用可能な最高の標準を使用することを意味します。


2

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


1
私はあなたの考えが好きです。ここにはFirefoxはありません。
デニスC

22
最悪。提案。ずっと。これは、IE専用のすべてのイントラネットサイトと同じくらい悪いです。少し余分な作業を行って、すべての一般的なブラウザーで作業できるようにしてください。それほど難しくありません。
mhenry1384

2
@ mhenry1384イントラネットシステムをロックダウンするようにとんでもない提案をする理由を説明するよう注意してください。古いブラウザのクォークをサポートする必要はありません。ユーザーは意図したエクスペリエンスを手に入れるでしょう。それは公共のシステムではありません、あなたはまだIE 5.5をサポートしていますか?公開ユーザーに更新するように伝えます。とにかくバックエンドシステムで時間を無駄にしてはいけません。私を必要とするのは公衆です。IE 6にロックダウンして、一部のようにActiveXを要求するようなものではありません。たとえば、私のシステムではFirefox 6以降が許可されています。したがって、Firefox 27がリリースされても、引き続き機能します。私に反対票を投じるか、実際の議論をします。
カイメン2012年

2
私が使用したすべてのイントラネットサイトは、特定のブラウザーにロックダウンされており、IEにロックダウンされています。IEが次の人と同じくらい嫌いなので、これは私を狂わせます。IEではなくても、選択したブラウザー(ユーザーのものではない)をユーザーに使用させることは、WebやイントラネットWebにさえ反するようです。特にjQueryのようなライブラリを使用している場合は、IE7 / 8/9でWebサイトを動作させることは、それほど難しくありません。ユーザーが望むものを使用できるようにします。
mhenry1384 2012年

2
たとえば、Firefox 10用に作成されたサイトは、ほとんどの場合、IE9で変更を加えなくても完全に問題なく動作します。したがって、ユーザーがIE9を使用できないように制限すると、何か他のことが起こっていることを意味します。これは、優れたWebソフトウェアを作成しようとしている人ではなく、あなたが発想上の使命を果たしていることを示しています。Firefox以外のブラウザをテストする時間がないという問題だけの場合は、Operaの使用を制限しますか?[とても言葉が多すぎてすみません。私はこのいまいましいIE8の問題の修正に戻る必要があります... :-)]
mhenry1384

1

私はこの問題に苦労しており、独自のソリューションと洞察を提供する手助けをしたいと思っていました。

特定の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 {
}

}

1

この問題をSpring-Apache-tomcat環境で解決するには、RequestInterceptorメソッドに1行追加します。

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


0

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

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

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

IE開発者によると、これは「IE8標準モードで標準DOCTYPEを表示し、互換モードで互換DOCTYPEを表示します。このタグを使用して、クライアントマシンの互換性ビューを上書きし、標準をIE8標準に強制します。」

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


0

この質問は、イントラネットのブラウザモード「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

同じ問題があった。それを使用して機能しました

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

0

これをページのヘッドタグ内に追加します(目的の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 }

0

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

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

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


移動するにはローカルグループポリシーエディタ、あなたが実行することができますgpedit.mscとファイル名を指定して実行から。
ROMANIA_engineer 2016年


0

ドキュメントモードとブラウザモードについての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では遅すぎるので、オフにしたいと思います。それ以外の場合は、ブラウザー機能のテストがこれを解決するのに役立つかどうかはわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.