web-dev-qa-db-ja.com

X-UA-CompatibleはIE = Edgeに設定されていますが、互換性モードは停止しません

私はかなり混乱しています。設定できるはずです

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

iE8およびIE9は、最新のレンダリングエンジンを使用してページをレンダリングする必要があります。ただし、テストしたばかりで、サイトの別の場所で互換モードがオンになっている場合は、強制しないようにする必要がありますが、 our page の間はそのままになります。

IEが(イントラネット内であっても)互換モードをnot使用しないことをどのように確認しますか?

FWIW、HTML5 DocType宣言(<!doctype html>)を使用しています。

ページの最初の数行は次のとおりです。

<!doctype html> 
<!--[if lt IE 7 ]> <html lang="en" class="innerpage no-js ie6"> <![endif]--> 
<!--[if IE 7 ]>    <html lang="en" class="innerpage no-js ie7"> <![endif]--> 
<!--[if IE 8 ]>    <html lang="en" class="innerpage no-js ie8"> <![endif]--> 
<!--[if (gte IE 9)|!(IE)]><!--> 
<html lang="en" class="innerpage no-js"> 
<!--<![endif]--> 
    <head> 
        <meta charset="ISO-8859-1" /> 
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 

編集: 私は今学んだ IE8のデフォルト設定は、イントラネットサイトにIE7互換モードを使用することです。これはX-UA-Compatibleメタタグをオーバーライドしますか?

245
Kerrick

イントラネットサイトに対するIEの互換表示設定を上書きする必要がある場合は、web.config(IIS 7)またはWebサイトのプロパティ(/ IIS 6)の カスタムHTTPヘッダー を使用してX-UA-Compatibleに設定できます。 。メタタグは、互換表示設定のIEのイントラネット設定を上書きしませんが、ホスティングサーバーで設定した場合は互換性を上書きします。

IIS 7のweb.configの例:

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

編集 clearの直前からaddコードを削除しました。コピー&ペーストによる不要な監視でした。いいキャッチ、コメンター!

259
Tim Franklin

@ TimmyFranksが彼の答えで提案したように、サーバーサイドソリューションが推奨されますが、ページレベルでX-UA-Compatibleルールを実装する必要がある場合は、次のヒントを読んで、経験を活用してくださいすでに火傷した人


X-UA-Compatibleメタタグmustは、<head>要素のタイトルの直後に表示されます。他のメタタグ、cssリンク、jsスクリプト呼び出しは、その前に配置できません。

<head>
    <title>Site Title</title>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta charset="utf-8">
    <script type="text/javascript" src="/jsFile.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="Apple-touch-icon" href="/Apple-touch-icon.png" />
    <link rel="shortcut icon" href="/Apple-touch-icon.png" />
</head>

ページに条件付きコメントがある場合(たとえば、<html>にあります)、<head>の後に配置する必要があります。

// DON'T: place class inside the HTML tag 
<!--[if gt IE 8]><!--> 
    <html class="aboveIe8"> 
<!--<![endif]-->

// DO: place the class inside the BODY tag
<!--[if gt IE 8]><!--> 
    <body class="aboveIe8"> 
<!--<![endif]-->

Html5BoilerPlateのチームはこのバグについて書いています- http://h5bp.com/i/378 彼らにはいくつかの解決策があります。

[イントラネットと互換性]ビューについては、[ツール]> [互換性ビューの設定]に移動すると設定があります。

Compatibility view settings

182
neoswf

あなたがPHPからそれを提供しているならば、あなたはそれを同様に修正するために次のコードを使うことができることに注意してください。

header("X-UA-Compatible: IE=Edge");
38
tj111

結局のところ、これは、X-UA-CompatibleIE=Edgeに設定されていても、すべてのイントラネットサイトに互換モードを強制させるために、 Microsoftの「インテリジェントな」選択 と関係があります。

25
Kerrick

私はまたローカルホストのためのIE7文書規格におけるIE9レンダリングの同じ問題を得ました。私は多くの条件付きコメントタグを試しましたが失敗しました。結局、以下のようにすべてのコンディショナルタグを削除し、メタタグをすぐに追加したところ、魅力的に機能しました。

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

それが役に立てば幸い

9
Pramod

[互換表示でイントラネットサイトを表示する]オプションをオフにして、応答ヘッダーにX-UA互換を設定している場合でも、ブラウザがデフォルトで[互換表示]に設定されている可能性があります。次のメッセージをコンソールで調べてください。

HTML1203:xxx.xxxは、グループポリシーを介して互換表示で実行されるように設定されています。

Xxx.xxxはあなたのサイトのドメインです(例test.com)。これが表示された場合、ドメインのグループポリシーは、test.comで終わるすべてのサイトがDoctype、ヘッダーなどに関係なく自動的に互換モードで表示されるように設定されています。

詳細については、次のリンクを参照してください(HTMLコードについて説明しています): http://msdn.Microsoft.com/ja-jp/library/ie/hh180764(v=vs.85).aspx

7
rshadman

NEOSWFが上で指摘したように、Paul Irish条件付きコメントはメタタグが影響を与えるのをやめます。

いくつかの修正がすべてここにあります( http://nicolasgallagher.com/better-conditional-classnames-for-hack-free-css/

これらが含まれます:

2つのHTMLクラスを追加します。サーバーヘッダーを使用し、Doctypeの上に条件付きコメントを追加します。

私の最新のプロジェクトで、私はPaul Irishの条件付きコメントを削除することにしました。私は最初にたくさんのテストをしないでHTMLの前に何かを追加するという考えが好きではなかったので、HTMLを見ることによって何が設定されたかを見るのはいいことです。

最後に、本体のすぐ後ろのdivを囲み、条件付きコメントを使用しました。

  <!--[if IE 7]><div class="ie7"><!--<![endif]-->
  ... regular body stuff
  <!--[if IE 7]></div><!--<![endif]-->

私は体の周りでこれを行うことができましたが、WordpressのようなCMSではもっと困難です。

マークアップ内の明らかに別のDIVが、それは古いブラウザ用です。

プロジェクトごとの決断かもしれませんが。

私はまた最初の1024バイトに来る必要があるcharsetメタタグについて何かを読んだのでこれはそれを確実にします。

時には、最も簡単で読みやすいアイデアが最高で、そのことについて考える価値があります。これを指摘してくれた上のリンクの6番目のコメントに感謝します。

5
user1010892

X-UA-Compatibleはブラウザモードではなくドキュメントモードのみをオーバーライドし、すべてのイントラネットサイトでは機能しません。このような場合は、[互換表示でイントラネットサイトを表示する]および グループポリシー設定を設定する を無効にして、互換モードを必要とするイントラネットサイトを指定することをお勧めします。

5
Tony

私はhtaccessファイルに以下を追加しました。

BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
5
Metzed

さらに、X-UA-Compatibleはヘッドセクションの最初のメタタグでなければなりません

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

ちなみに、正しい順序またはメインのヘッドタグは次のとおりです。

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta charset="utf-8">
    <title>Site Title</title>
    <!-- other tags -->
</head>

こちらです

  1. iExplorerが処理を開始する前に使用するレンダリングエンジンを設定します。
  2. ドキュメントは、すべてのブラウザに使用するためにエンコーディングを設定します
  3. それからタイトルを印刷します。それはすでに定義されたエンコーディングで処理されます。
3
Leonardo Molina

Nginxの場合、

add_header "X-UA-Compatible" "IE=Edge,chrome=1";

ref: https://github.com/h5bp/server-configs/commit/a5b0a8f736d68f7de27cdcb202e32975a74bd2c5

2
z2z

Timmy Franksは私にとってそれを正しく持っていました。今日の問題は、クライアントが全社的にIE8を所有していたところにあり、イントラネット用に作成したサイトを互換モードにすることを余儀なくされました。 「IE-Edge」を設定して修正したようです。

<httpProtocol>
  <customHeaders>
    <clear />
    <add name="X-UA-Compatible" value="IE=Edge" />
  </customHeaders>
</httpProtocol>
2
SouthShoreAK

IE 11では、ヘッダーを送信してブラウザの互換表示設定を上書きすることはできません。

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

ブラウザが互換表示を使用しないようにする唯一の方法は、ブラウザでそれを無効にすることです。 Oursはイントラネットサイトであり、デフォルトの IE オプションはイントラネットサイトに互換表示を使用することです。なんて痛い!

IE 9と10のユーザーのためにユーザーがブラウザ設定を変更する必要を防ぐことができましたが、 IE 11では機能しなくなりました。Our IE ユーザーはChromeに切り替えていますが、これは問題ではありません。

1
EricP

私はphpでHTMLの前にヘッダをロードすることを回避することができました、そしてそれは非常にうまくいきました。

<?php 
header( 'X-UA-Compatible: IE=Edge,chrome=1' );
header( 'content: width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' );
include('ix.html');
?> 

ix.htmlはヘッダを送信した後にロードしたいコンテンツです。

1
user3071843

IE11でも同じ問題が発生していました。これらの答えのどれも私の問題を解決しませんでした。ちょっと調べたところ、ブラウザが Enterprise モードで動作していたことに気づきました。 (F12を押してエミュレーションタブをクリックして確認し、ブラウザプロファイルのドロップダウンを探します)設定がロックされていて、設定を変更できません。

次のレジストリキーから CurrentVersion を削除した後、プロファイルを Desktop に変更できました。

HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode

モードを デスクトップ に変更した後、この投稿の回答はうまくいきます。

1
jfatal

ブラウザが互換モードで開いているとき、Webブラウザとローカルグループポリシーエディタからすべての互換モード設定を削除してオフにしても、登録キーから無効にすることができます。

これは、サーバー側に接続するためにドメインとサブドメインを使用する際にも起こります。マシンはすべてのサブドメインに対して互換モードで開くように制限されています。

イントラネットで使用できない互換モード

HKEY_LOCAL_MACHINE - ソフトウェア - ポリシー - Microsoft - Internet Explorer - ブラウザエミュレーション - > IntranetCompalityMode 値は 0(ゼロ) である必要があります。また、PolicyListから既存のドメイン名を削除します。

それ以外の場合は、 0(ゼロ) 値のデータを含む新しい値(DWORD)を追加できます。

1
ayciceksamet

LAMPスタックを使用している場合は、これをWebルートフォルダの.htaccessファイルに追加してください。すべてのPHPファイルに追加する必要はありません。

<IfModule mod_headers.c>
    Header add X-UA-Compatible "IE=Edge"
</IfModule>
0
Kevin Smith

私はこのワーキングノートを持っていた多くの組み合わせを試した後に同じ問題を抱えていた

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<head runat="server">
0
capadleman