IE8ブラウザで互換表示がオンになっているかどうかを判断する方法はありますか?
グーグルで何も見つからないようですので、これが入手できる情報なのかしら….
なぜ聞くの!?アプリケーションのバグを追跡しようとしています。私はエルマの丸太をつなぎ合わせていますが、傾向があるようです。このエラーは通常、IE8によってスローされます。 IE8のコピーで欠陥を再現しようとしましたが、できませんでした。犯人を絞り込みたいのですが、これがその方法かもしれないと思いました。
Javascriptでは、document.documentModeを使用します
詳細については、 http://msdn.Microsoft.com/en-us/library/cc196988%28VS.85%29.aspx を参照してください。
明らかにIE8にはいくつかの新しいプロパティがあります
document.documentMode
そして
document.compatMode
http://msdn.Microsoft.com/en-us/library/cc196988(VS.85).aspx
私が使用しているもの:
try{ JSON } catch (e){ alert("Compatibility Mode Detected") }
JSON
オブジェクトはIE 8
で定義されているため、IE 7
で、またはCompatibility Mode
でエラーがスローされ、キャッチされます。
これが毎回機能するのが好きで、1行です。
UserAgentで「Trident/4.0」を確認してください。 IE-8にのみ存在する必要があります。 http://social.msdn.Microsoft.com/Forums/en-US/iewebdevelopment/thread/33e0ed49-11fb-4d91-857c-a35496e90075
@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...");
}
}
私はそれがユーザーエージェント文字列に含まれていると信じています:
「ユーザーエージェント文字列の新しいタグにより、互換表示でサイトを表示しているクライアントを検出できます。このタグは、「通常の」Internet Explorer8ユーザーエージェント文字列にも存在します。」
「ユーザーがサイトの互換表示を選択した場合、バージョンターゲティングタグ/ HTTPヘッダーを使用して、目的のレイアウトモードに「戻す」ことができます。新しいコンテンツ値「IE = EmulateIE8」が完成します。サポートされている値のリストと、この特定のシナリオでの支援。」
詳細はこちら: http://blogs.msdn.com/ie/archive/2008/08/27/introducing-compatibility-view.aspx
MVC/ASPでは、互換表示の場合、Request.Browser.Versionはバージョンに関係なく「7.0」を返します。それ以外の場合は、ブラウザーのバージョンを返します。
Request.Browser.Browserを使用して、IEであることを確認することもできます
Request.Browser.Version
Request.Browser.Browser