6

I've got two very different websites. Both of them have different errors when displayed in the "Internet explorer 8" browser mode!

When clicking the "Compatibility view" button next to the address bar both of the sites look great. When I afterwards look at the "Browser mode" and "Document node" by using the built-in "Developer tools", I also notice the "Browser mode" is "IE8 Compat view" and the "Document mode" is "IE7 Standards". Just as I expect them to be.

Then I want to force "Internet Explore 8" into the "Browser mode" : " IE8 Compat view", so that my users won't have to click the "Compatibility view" button next to the address bar to get what they really need to see.

The only way I can think of doing this is by inserting a metatag below the title inside the header like this:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <title>Test</title>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
        <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
        <link ... />
        <script ...></script>
    </head>
    <body>
        ...
    </body>
</html>

Then i reload the website and the "Compatibility view" button next to the address bar disapears. Just as expected. When I afterwards look at the "Browser mode" and "Document node" by using the built-in "Developer tools", I suddenly see something I really did NOT expect. I expected the "Browser mode" to be "IE8 Compat view" and the "Document node" to be "IE7 Standards", but the "Browser mode" is "IE8" and the "Document mode" is "IE7 Standards" and the websites suddenly have a new set of errors compared to when viewed in "Internet explorer 8" browser mode!

It is very frustrating why can't I force the "IE8 Compat view" browser mode instead of the "Internet explore 7" or "Internet explore 8" browser modes?

4

8 に答える 8

5

IEBlogを引用するには:

「ブラウザモード」は、ユーザーエージェント文字列、条件付きコメントを評価するときに使用されるバージョンベクトル、およびレンダリングモードに影響します。

詳細については、 http://msdn.microsoft.com/en-us/library/dd565624( VS.85 ).aspxを参照してください。

はっきりとわかるように、とにかくこれらすべてに影響を与えることはできません。ブラウザにIE7のように動作するように指示するまでに、ブラウザはすでにIE8として動作しています。

おそらく本当の質問は、ブラウザモードが何であるかがあなたにとってそれほど重要なのはなぜですか?ドキュメントモードはあなたが最も気にかけるべきものです-レンダリングに関する限りブラウザモードが変更するものはすべて、除外/含まれているものに関連していますが、バージョンチェックであり、ユーザーはとにかく開発者ツールを見るつもりはありません、だから彼らは気にしません

開発者ツールで純粋な互換モードのように見せるために多くの時間を無駄にするのではなく、IE7とIE8が同じマテリアルを使用できるように、ユーザーエージェントの文字列チェックと条件付きコメントを使用して確認する必要があります。次に、EmulateIE7をに残します。

編集:

問題はバージョンチェックです。以下で約束したように、問題がどこにあるかを説明します。

開発ツールを使用してメニュー配置スクリプトをデバッグする場合、ブラウザがIE7またはIE8として自分自身を報告するときにget_x_positionの実行パスが異なることを確認できます。IE7is_ie5upモードではtrueに設定され、IE8モードではfalseに設定されます。これにより、非常に異なる値が返されます。

この時点で、この変数が設定されている場所に戻る必要があります。

var is_ie5up    = (is_ie6up || (is_ie  && !is_ie3 && !is_ie4));

ご覧のとおり、これはの値に依存するis_ie6upので、周囲のコードを見てみましょう...

var is_ie8up    = (is_ie8   ||  is_ie9up);
var is_ie7up    = (is_ie7   ||  is_ie8up);
var is_ie7up    = (is_ie7);
var is_ie6up    = (is_ie6   || is_ie7);
var is_ie5up    = (is_ie6up || (is_ie  && !is_ie3 && !is_ie4));
var is_ie5_5up  = (is_ie6up || (is_ie && !is_ie3 && !is_ie4 && !is_ie5));

...欠陥を見つけましたか(ヒント:そのスニペットの2行目と4行目を比較してください)?

そうです:is_ie6upブラウザが正確にIE6またはIE7でない限り、trueに設定されていません。もちろん、適切な行は次のようになります。

var is_ie6up    = (is_ie6   || is_ie7up);

...ちょっと待って。スニペットの3行目はis_ie7up、ブラウザーが正確にIE7である場合にのみ真になるように変更されるため、これも適切ではありません。is_ie7upしたがって、の上書きを削除し、の設定を修正する必要がありますis_ie6up

私の推測では、他のサイトでもまったく同じ問題が発生していると思います。ブラウザのチェックをほとんど同じように台無しにしてしまいました。

于 2009-08-03T21:51:49.697 に答える
2

メタ タグを正しく設定しましたが、ブラウザを再起動するまで、IE8 は以前のレンダリング モードを使用しているように見えます。

ユーザーに表示される内容を伝えるには:

  1. 開発者ツールバーの をクリックして、Document Modeマークされている値を確認します(Page Default)
  2. IE8 を再起動してドキュメントを表示します。IE はページのデフォルトを使用するはずです。
于 2009-08-10T02:47:55.257 に答える
1

私の特定のケースでは、サイトが Compat View で適切にレンダリングされませんでした。ブラウザ モードがユーザー エージェント文字列に影響することをようやく知りました。私のサイト スタイル ルールはユーザー エージェントに基づいていたため、いくつかのスタイルが Compat ビューに適用されませんでした。

使っていました

document.documentElement.setAttribute('data-useragent', navigator.userAgent);

後でCSS属性セレクターを使用できるように

html[data-useragent*='MSIE 8.0'] p {}

追加して解決しました:

html[data-useragent*='MSIE 7.0'] p {}

(真のIE7はとにかくサポートされていなかったので、真のIE7は気にしません)

私の経験では、開発者が IE8 を「ブラウザ モード: IE8 Compat View」から「ブラウザ モード: IE8」に強制するためにできることは何もありません。繰り返しますが、DocumentModes ではなく BrowserModes について話しているのです (メタ タグ、応答ヘッダーなどで制御できます)。

于 2014-04-25T16:36:14.583 に答える
1

xmlns="http://www.w3.org/1999/xhtml" 属性は、メタ タグをキャンセルしています。meta タグを html タグの上に移動します。ええ、そうです、html タグの上です。次に、javascript を実行する前に emulateIE7 を実行します。これを IE7、IE8、および Firefox でテストしました。

于 2009-10-09T04:11:23.493 に答える
0

ページに ASP.NET Ajax が含まれている場合は、これを使用してサイトを更新する必要がある場合があります。

http://support.microsoft.com/kb/2600088

于 2012-12-11T20:14:08.890 に答える
0

asp クラシック サイトの HML5 ボイラープレートを使用して、IE8 をドキュメント モード IE8 標準に強制する際に問題がありました。これと他の質問からの回答をつなぎ合わせて、<doctype>宣言の上にこのコードを追加すると、問題が解決され、ドキュメントモードがIE7からIE8に強制的に戻されたようです。<%= response.AddHeader("X-UA-Compatible", "IE=edge") %>

于 2012-01-06T18:15:55.157 に答える
0

間違ったドキュメント タイプを使用していることが問題ではありませんか?

多分:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

詳細については、http://htmlhelp.com/tools/validator/doctype.htmlを参照してください。

于 2009-08-03T21:35:53.020 に答える
0

XML ドキュメントを変換していたため、DOCTYPE を正しく設定できませんでした。XML で無効なの上に移動する代わりに<html>、単純にヘッダーに挿入します。

PHP の場合:

header("X-UA-Compatible: IE=7");
于 2011-06-09T17:27:05.943 に答える