2012-10-29 16 views
8

私はある種類のJavaScriptライブラリを開発しています。そして、私はいくつかの特定の問題を持っている問題を引き起こします: ブラウザ:IE8/IE9とドキュメントモード:IE7 私は解決策を見つけましたが、私はすべての状況でそれを使用したくないし、私は上記の状況に陥っています。私は、私が使用してブラウザを認識することができることを知っている:ブラウザを取得する方法 "ドキュメントモード"

return navigator.userAgent.toLowerCase().indexOf('MSIE 8') > -1; 

をしかし、私は、このようなやり方ではなく、ドキュメントモードでちょうどブラウザのバージョンを認識し、そして私は、例えば、ブラウザを持っているとき、私は私の解決策を使用する必要はありませんモードIE8とドキュメントモードIE8の両方で使用できます。 IEでページドキュメントモードを使用する方法はありますか?前もって感謝します。

答えて

27

document.documentModeを使用すると、IEが使用しているドキュメントモードを正確に返すことができます。

ブラウザモードがIE9に設定されていて、文書モードがIE8に設定されている場合は、document.documentMode == 8が返されます(userAgent文字列は引き続きIE9として表示されます)。これは、ブラウザモードではなくページのレンダリング方法を決定するドキュメントモードであるため、JSにスタイリングの変更が含まれている場合に特に便利です。互換モードは、実際には(通常はIE7に)文書モードを変更するだけです。いくつかの助け

if (document.documentMode == 7) { 
    doSomethingIn.IE7_only; 
} else { 
    doSomething.everwhereElse; 
} 

希望:私はちょうどIEのを区別するために、このようなものを使用していた私が必要としましたいくつかのケースでは

+0

ドキュメントmode.likeを設定することはできますか(document.documentMode == 8){document.documentmodeを任意の値に設定} –

+0

残念ながら、JavaScriptで設定することはできません。しかし、希望のIEモードを指定するために、x-ua-compatabilityメタタグを使用することができます。これは、従来のバージョンのIE(IE11 +など)で動作することに注意してください。これはいくつかの詳細情報を参照してください:http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx –

+2

「document.documentMode」はIE8 +でのみサポートされていることに注意してください。ネイティブIE7レンダリングをターゲットにする必要がある場合は、追加の '機能検出'が必要です。 – WynandB

1

文書モードの取得方法がわかりませんですが、より基本的な方法で問題を解決することをお勧めします。スクリプトでdocument.querySelectorを使用したかったとします。それはIE8 /文書モードIE7標準では失敗するでしょう。 document.documentModeを使用します。

return ~navigator.userAgent.toLowerCase().indexOf('MSIE 8') 
     && document.querySelector; //=> IE8 and Docmode IE7 => false 

ドキュメントモードをチェックする方法を見つけた:だからdocument.querySelector自身の存在のための追加のチェックが解決策になります。整数を返します(文書モードIE7標準の場合は7)。Quirks modeの場合は5です。 IE以外のブラウザではundefinedになります。

+0

はい、いい考えですが、javascriptや機能が不足していないわけではありません。別のドキュメントモードでも同じ機能のいくつかの動作があります。あなたのソリューションを使用する別の方法として、あなたは "DocumentMode IE7"の下で動作しないいくつかの機能を知っていますか?私がこのような機能を見つけたら、それを使って文書モードを認識することができます。 – Mikhail

+0

docmode IE7では 'document.querySelector'は動作しません。とにかく、有用なIE-documentプロパティが見つかりました。更新された答えを見てください。 – KooiInc

+0

document.documentModeはIE8 +でのみサポートされているので、ネイティブIE7レンダリングをターゲットにする必要がある場合は、追加の '機能検出'が必要です。 – WynandB

関連する問題