web-dev-qa-db-ja.com

IE8が互換表示で実行されているかどうかを検出するにはどうすればよいですか?

IE8ブラウザで互換表示がオンになっているかどうかを判断する方法はありますか?

グーグルで何も見つからないようですので、これが入手できる情報なのかしら….

なぜ聞くの!?アプリケーションのバグを追跡しようとしています。私はエルマの丸太をつなぎ合わせていますが、傾向があるようです。このエラーは通常、IE8によってスローされます。 IE8のコピーで欠陥を再現しようとしましたが、できませんでした。犯人を絞り込みたいのですが、これがその方法かもしれないと思いました。

27
Gavin Miller

Javascriptでは、document.documentModeを使用します

詳細については、 http://msdn.Microsoft.com/en-us/library/cc196988%28VS.85%29.aspx を参照してください。

18
Alohci

明らかにIE8にはいくつかの新しいプロパティがあります

document.documentMode

そして

document.compatMode

http://msdn.Microsoft.com/en-us/library/cc196988(VS.85).aspx

7
Tommy

私が使用しているもの:

try{ JSON } catch (e){ alert("Compatibility Mode Detected")  }

JSONオブジェクトはIE 8で定義されているため、IE 7で、またはCompatibility Modeでエラーがスローされ、キャッチされます。

これが毎回機能するのが好きで、1行です。

3
Brian McGinity

UserAgentで「Trident/4.0」を確認してください。 IE-8にのみ存在する必要があります。 http://social.msdn.Microsoft.com/Forums/en-US/iewebdevelopment/thread/33e0ed49-11fb-4d91-857c-a35496e90075

3
Michael Baranov

@Tommyの答えを拡張するには、特徴検出を使用します(アラートはもちろんオプションです。どこかでNice divまたはインラインメッセージを使用します):

if(typeof document.documentMode !== 'undefined') { // checks if this is IE 8 or >
         if(document.documentMode < 8) {  // check if in compat mode 
             // add code here to inform user that they need to turn off compatiblity view
             alert("Click ALT-T then compat view etc...");  
         }
} 
2
sijpkes

私はそれがユーザーエージェント文字列に含まれていると信じています:

「ユーザーエージェント文字列の新しいタグにより、互換表示でサイトを表示しているクライアントを検出できます。このタグは、「通常の」Internet Explorer8ユーザーエージェント文字列にも存在します。」

「ユーザーがサイトの互換表示を選択した場合、バージョンターゲティングタグ/ HTTPヘッダーを使用して、目的のレイアウトモードに「戻す」ことができます。新しいコンテンツ値「IE = EmulateIE8」が完成します。サポートされている値のリストと、この特定のシナリオでの支援。」

詳細はこちら: http://blogs.msdn.com/ie/archive/2008/08/27/introducing-compatibility-view.aspx

0
ericvg

MVC/ASPでは、互換表示の場合、Request.Browser.Versionはバージョンに関係なく「7.0」を返します。それ以外の場合は、ブラウザーのバージョンを返します。

Request.Browser.Browserを使用して、IEであることを確認することもできます

Request.Browser.Version
Request.Browser.Browser
0
Jim