42

ベクター描画に依存する Web サイトがあります。Internet Explorer ではVMLを使用し、他のブラウザーではSVGを使用しています。ただし、IE8 は、VML を備えた IE7 モードにフォールバックしない限り、どちらもサポートしていません。

したがって、私は含めて<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />います。

問題 (実際には良いことです) は、IE9 が SVG をサポートするようになったため、パフォーマンスと互換性がはるかに悪い IE7 モードにフォールバックしたくないということです。IE8 のみを IE7 モードにフォールバックさせ、IE9 は IE9 モードのままにするにはどうすればよいですか?

現在、エージェントのサーバー側で EmulateIE7 文字列をヘッドに含めるかどうかをチェックしていますが、可能な限りこれを避けたいと考えています。

4

8 に答える 8

41

私はちょうど演劇をしたところ、次の作品を見つけました。

<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" >

それはセミコロンではなくカンマです!

仕様は見ていませんが、形式は Chrome Frame で動作する content="IE=7,chrome=1" に似ています。また、 content="IE=7,9" が機能することもわかりましたが、それは正しい形式ではないと思われます。

編集:

ページが iframe 内にある場合、重大な問題に注意してください。親がIE9 strict 未満モードであるフレーム ページで上記を使用すると、 IE9 は IE8 モードにフォールバックします(IE=7 要求を無視します!)。既知の回避策を歓迎します:) IE11には関係ないかもしれません。

上記は、設計上の機能の副作用のようです.iframe(および私はフレームを推測します)がすべてIE9モードであるか、すべてIE9モード未満です。IE9 フレームと < IE9 フレームを混在させることはできません。MS の問題#599022および# 635648 を参照してください。

編集2:

IE11 は "IE=edge" (IE=11 ではない) のみをサポートし、IE=edge を使用すると IE の機能 (ユーザー エージェントを含む) に重大な影響を与えることに注意してください。

編集3:

編集4:

X-UA-CompatibleMicrosoft Edge ブラウザーから削除されました。互換モードを備えているのは Internet Explorer だけです。Windows Phone 10 のアプリ内で WebView を使用している場合は、まだ IE11 (Edge ではない) を使用していることに注意してください。

document.documentModeまた、さまざまな理由から、JavaScript から使用する代わりに、ユーザー エージェントが正しい互換性レベルを伝えることを信頼できません。

編集5:

X-UA-Compatibleたとえば、ActiveX から IE11 を (ラッパー アプリケーション内の WebView として) 使用している顧客は、これを設定IE=EDGEしないと IE11 を IE7 モードに戻すことができます。

于 2010-12-02T02:26:00.753 に答える
27

他の誰かが言及したデュアルモードは機能するはずです(ただし、Microsoftによって示されているようには機能しません)。これは、説明されているように機能するはずのMSドキュメントで私が見た中で最も近いものです。以下に、メタ属性値がとるべき適切な形式を示す更新があります。

したがって、これを使用する場合:

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

残念ながら、x-ua互換エンジンが行うファジーバージョンのベクトル化のため、IE8はIE8としてレンダリングされます。このドキュメントを参照してください: ドキュメントの互換性の定義: MSDNのコンテンツ属性値について。そのセクションでは、前半で、現在のブラウザバージョンよりも大きいと定義されたバージョンベクトルが、使用可能な最大のレンダリングエンジンとして解釈されることを定義していることがわかります。したがって、emulateIE9getはemulateIE8に変換されます。愚か。

次に、実際には同じように、特定のエンジンを除外するために上記のコードスニペットのように複数のバージョンベクトルを使用することについて話します。しかし、ファジーバージョンロジックのため、それは決して機能しません。ああ、マイクロソフト。もう一度失敗します。

メタの周りでCCを使用できない理由は、ブラウザがCCに到達するまでにレンダリングエンジンを選択している必要があるためです。x-uaメタは、MS独自のドキュメントによると、他のメタまたはタイトルを除いて、ヘッダー内の何よりも前に配置する必要があります。

誰かがこれを理解できれば、IE9を含めながらIE8をサポートから除外したいので、私はすべての耳です。

重要な更新

Robocatは、Micrsoftが示すように、セミコロンの代わりにコンマを使用することがこれを行う正しい方法であると指摘しています。私はそれをテストしました、そしてそれは私のために働きました。テストページを更新しました。

したがって、正しい形式は次のとおりです(robocatによって提案されたように):

<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9">

間違った形式はこれです(Microsoftによって提案されたように):

<meta http-equiv="X-UA-Compatible" content="IE=7; IE=9">
于 2010-10-20T20:57:00.313 に答える
3

IE 8 で IE7 標準を使用し、IE 9 で IE9 標準を使用する場合、これは私にとってはうまくいきました。

<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9">

IE9 の場合、これにより、IE 9 標準との IE 9 互換モードが得られます。IE8の場合、これによりブラウザモードIE8ドキュメントモードIE7標準が得られます

于 2011-10-18T11:07:46.200 に答える
3

私はこれまでこれらすべてを使用してきましたが、IE9では何も機能しません:

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

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

これは非常にイライラします。これらのメタ タグはどれも機能していないようです。マイクロソフト、ドキュメントで機能するはずだと言っていることをサポートするのがとても難しいのは何ですか? ブラウザ戦争に何時間も費やさなければなりません。あなたはみんなの時間を無駄にしています。

于 2011-05-25T16:26:31.597 に答える
0

これは私にとってIE9で機能します。

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>
于 2015-07-29T21:53:51.930 に答える
-1

うわーマイクロソフトは本当にここで悪夢を作り出しました. これについては、今後も話し合っていきます!

とにかく、これは私にとってはうまくいきます。

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9" />
于 2010-10-29T04:27:13.277 に答える
-1

必要なのは次のとおりだと思います。

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

http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-site-developers.aspxによると、 これは「... 例これは値を組み合わせて、IE8 が IE7 標準モードで Web ページをレンダリングし、IE9 が IE9 の標準モードで Web ページをレンダリングするようにします:"

しかし、私はこれを機能させることができません。

于 2010-10-05T13:17:52.357 に答える
-3
<!--[if IE 8]>
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<![endif]-->

条件付きコメントと呼ばれます
http://en.wikipedia.org/wiki/Conditional_comment

于 2010-08-05T10:08:12.233 に答える