jQueryでIE 8を検出するにはどうすればよいですか?


102

jQueryを使用して、ブラウザーの種類だけでなくバージョンも検出する必要があります。ほとんどの場合、IE 8かどうかを調べる必要があります。

私がそれを正しく行っているかどうかはわかりません。

私が行った場合 :

if (jQuery.browser.version >= 8.0) {
dosomething}

バージョン8.123.45.6で機能するかどうかはわかりませんか?

編集:JQuery 2+はIE8以前のサポートを終了したため、IE8の検出に使用できなくなったことに注意してください。JQueryの現在のバージョンを使用している場合は、非JQueryソリューションを使用する必要があります。


11
以下に提案する回答は、jQuery.browserを使用することをお勧めします。ただし、jQueryのドキュメントではjQuery.browserの使用は推奨されていません。代わりに、jQuery.supportを使用し、サポートされていない機能をポイントしてブラウザーにフラグを立てることをお勧めします。たとえば、if(jQuery.support.opacity == false){your IE8 and IE7 code}
IberoMedia

これはjquery.support.opacityちょうど私が望んだことをしました。ありがとう...
nrod


物事を適切に行っている場合は、ブラウザのバージョンを検出する必要はほとんどありません。この機能がjQueryから削除されたのには理由があり、その理由は、ブラウザーのバージョン検出が悪い習慣であることです。代わりに特徴検出を使用すると、ほとんどすべての場合で問題が解決します。
Spudley

2
IE8を検出する必要があるのは、JavaScriptエンジンのブラウザが非常に遅いため、IE8を検出する必要があるためです。このページに「スクリプトの実行を停止しますか」というダイアログが表示され、デフォルトは「はい」です。このための機能検出メカニズムがある場合は、それを使用します。それ以外の場合は、ブラウザ== IE8の場合です。JavaScriptを最適化することはできません。それは、それを引き起こすのがKendo自身のツリービューコードであるためです
PandaWood

回答:


79

jQuery APIドキュメントに記載されています。でInternet Explorerを$.browser.msie確認し、でバージョンを確認し$.browser.versionます。

更新: $ .browserがjQuery 1.9で削除されました

jQuery.browser()メソッドはjQuery 1.3以降廃止され、1.9で削除されました。必要に応じて、jQuery Migrateプラグインの一部として利用できます。Modernizrなどのライブラリで特徴検出を使用することをお勧めします。


もし私がそうなら:if(jQuery.browser.version> = 8.0){dosomething}それがバージョン8.123.45.6で動作するかどうかはわかりませんか?
salmane

13
これは文字列なので、行う必要がありますif(jQuery.browser.version.substring(0, 2) == "8.") { ... }。そうすれば、IE8のすべてのバージョンで動作します。
AndiDog

13
jQuery.browser1.3で非推奨となり、将来プラグインに移動される可能性があります。jQuery.browserのドキュメントを参照してください
bendytree

ありがたいことに、それはまだ存在しており、非推奨についての言及はありません。@ bendytree
Alastair

47
jquery.browserは1.9で削除されました
Mandeep Jain 2013

173

私はこれが最善の方法だと思います:

HTML5ボイラープレートから:

<!--[if lt IE 7]> <html lang="en-us" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html lang="en-us" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html lang="en-us" class="no-js ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en-us" class="no-js"> <!--<![endif]-->

JS:

if( $("html").hasClass("ie8") ) { /* do your things */ };

特に$.browserjQuery 1.9 以降から削除されました。


11
これは、IEのバージョンを検出する非常に賢い方法です。とても好きです!
グレッグ

「:アプリケーション/ XHTML + xmlのコンテンツ・タイプ」ヘッダ、これらの条件付きコメントは無視されるよりも、あなたのウェブサイトが同梱されている場合が、動作しません
フィリップ・

1
非常に賢いですが、HTML5BPの条件によって追加された現在のクラスを確認する必要があることに注意してください。現時点では私はクラスがあると思いlt-ie9AOTie8
byronyasgur

2
@meo私もこの実装が好きです。しかし、<html>代わりにクラスがアタッチされている理由はあり<body>ますか?
2013

@meo興味深い。ありがとう。
2013


56

HTMLを使用してIE8を検出することもできることを忘れないでください。

<!--[if IE 8]>
<script type="text/javascript">
    ie = 8;
</script>
<![endif]-->

すべてのスクリプトの前にそれがあると、「ie」変数などを確認するだけで済みます。


4
この構文は、「より小さい」(「[if lt IE 7]」)および「より大きい」(「[if gt IE 8]」)コンパレータもサポートしています。
spiffytech

1
<!-[if lte IE 8]> ie8を含める
user227353

1
これが最良の方法です。「IE8を使用している理由」という別のページにリダイレクトするだけです。今すぐアップグレード!
Leon Gaban 14

2
今日の標準では、なぜIEを使用しているのかを尋ねます。
TheBuzzSaw 14

これは、JQuery 2.1.1がIE8で動作しないため、IE8を検出するために使用できないため、現時点で最良のソリューションのように見えます。
Dave、

27

ブラウザがIE8でない場合、document.documentModeは未定義です。

標準モードの場合は8、「IE7互換」の場合は7を返します

IE7として実行している場合、サポートされない多くのcssおよびdom機能があります。


9
IE9は9を返すことに注意してください。これは投票数の多い回答になるはずですが、$。browserは適切なソリューションではなくなったためです。試してみる:if ((document.documentMode || 100) < 9) { // IE8
Don McCurdy 2013

if(document.documentMode!== undefined && document.documentMode == 8){...}
jpprade

IE8がまだ非常に多く使用されている一部のアプリケーション、つまり米国の学校では、@ Don McCurdyのアプローチはシンプルかつ効果的です。Modernizrと連携して、問題なく動作します。
cbmtrx

正解です。これにより、IE8からIE11までのバージョン番号が返されます(条件付きコメントはIE5からIE9までと比較されます。正規のIE7またはIE6も検出する必要がある場合は、条件付きコメントを使用する必要があります)。ドキュメントよれば0、ページのロード中に「後でドキュメント互換モードを決定してください」(つまり、ドキュメントの準備ができた後)で戻る可能性があることに注意してください。
user56reinstatemonica8 2016

15

想定しています...

  • ... 古いIEでスタイルを正しく見せるために、検出したい古いバージョンのIE の扱いにくいレンダリングエンジンである(そうでない場合は、機能検出を使用する)
  • ... 条件付きのコメントをHTMLに追加するだけではできない -たとえば、任意のページに適用できるJSプラグインの場合(そうでない場合は、<body>またはで条件付きクラスのトリックを実行するだけ<html>

...これがおそらく最良のトリックです(この非jQueryに基づいており、やや柔軟性が低いバリアントです)。次に、適切な条件付きコメントを作成してテストし、削除します。

(条件付きのコメントはIE10 +の「標準モード」では無視されますが、IE10 +の「標準モード」にはクレイジーなレンダリングエンジンがないため、問題ありません。)

この関数をドロップします。

function isIE( version, comparison ){
    var $div = $('<div style="display:none;"/>');

    // Don't chain these, in IE8 chaining stops some versions of jQuery writing the conditional comment properly
    $div.appendTo($('body'));
    $div.html('<!--[if '+(comparison||'')+' IE '+(version||'')+']><a>&nbsp;</a><![endif]-->');

    var ieTest = $div.find('a').length;
    $div.remove();
    return ieTest;
}

次に、次のように使用します。

if(isIE()){ /* runs in all versions of IE after 4 before standards-mode 10 */ }

if(isIE(8)){ /* runs in IE8 */ }

if(isIE(9)){ /* runs in IE9 */ }

if(isIE(8,'lte')){ /* runs in IE8 or below */ }

if(isIE(6,'lte')){ /* if you need this, I pity you... */ }

また、この関数の結果をキャッシュして、繰り返し実行する必要がないようにすることをお勧めします。たとえば、文字列(comparison||'')+' IE '+(version||'')をキーとして使用して、どこかでオブジェクトのこのテストの結果を保存および確認できます。


9

注意:

1)$ .browserはjQuery 1.9以降では削除されているようです(Mandeep Jainが指摘)。代わりに.supportを使用することをお勧めします。

2)ブラウザが「互換性」モードの場合、$。browser.versionはIE> 7で「7」を返すことができます。

3)IE 10以降、条件付きコメントは機能しなくなります。

4)jQuery 2.0+はドロップします IE 6/7/8のサポートを終了します

5)document.documentModeは、Internet Explorer 8以降のブラウザーでのみ定義されているようです。返された値は、Internet Explorerが実行している「互換性」モードを示します。それでも良い解決策ではありません。

多数の.support()オプションを試しましたが、IEブラウザー(9+)が互換モードの場合、IE 7と同様に動作するようです... :(

これまでのところ、私はこれが機能することだけを見つけました(種類a):

(documentModeが定義されておらず、htmlSerializeとopacityがサポートされていない場合は、IE <8を参照している可能性が高いです...)

if(!document.documentMode && !$.support.htmlSerialize && !$.support.opacity) 
{
    // IE 6/7 code
}

5

ブラウザのバージョンをいじると、あまり効果がありません。自分で実装する必要はありません。しかし、Paul Irishや他の賢い人々によって作られたModernizrは使えます。ブラウザが実際に何ができるかを検出し、適切なクラスを<html>要素に配置します。ただし、Modernizrでは、次のようにIEのバージョンをテストできます。

$('html.lt-ie9').each() {
    // this will execute if browser is IE 8 or less
}

同様に.lt-ie8、およびを使用できます.lt-ie7


3

jQuery.supportも確認してください。機能検出は、機能をコーディングするためのブラウザー検出よりもはるかに信頼性が高くなります(ブラウザーのバージョンをログに記録しようとしている場合を除きます)。


3
どのようにjQuery.supportを使用してIE8を検出しますか?
BishopZ 2012

AJAXが探しているものである場合、ブラウザーがAJAXをサポートしている場合にtrueを返すjQuery.support.ajaxを使用できます
Jonathan Lin

この答えは役立つはず:stackoverflow.com/questions/1944169/...
helgatheviking

3

このjqueryを使用して、ブラウザのタイプとバージョンを簡単に検出できます

$(document).ready(function()
{
 if ( $.browser.msie ){
    if($.browser.version == '6.0')
    {   $('html').addClass('ie6');
    }
    else if($.browser.version == '7.0')
    {   $('html').addClass('ie7');
    }
    else if($.browser.version == '8.0')
    {   $('html').addClass('ie8');
    }
    else if($.browser.version == '9.0')
    {   $('html').addClass('ie9');
    }
 }
 else if ( $.browser.webkit )
 { $('html').addClass('webkit');
 }
 else if ( $.browser.mozilla )
 { $('html').addClass('mozilla');
 }
 else if ( $.browser.opera )
 { $('html').addClass('opera');
 }
});

1

ここには、ブラウザー/ OS検出を識別するためのJqueryブラウザー検出プラグインです。

プラグインを組み込んだ後、これをスタイリングの目的で使用できます。

$("html").addClass($.os.name);
$("body").addClass($.browser.className);
$("body").addClass($.browser.name);

0

$ .browserを使用して、ブラウザー名を検出できます。可能な値は次のとおりです。

  • webkit(jQuery 1.4以降)
  • Safari(非推奨)
  • オペラ
  • ミシー
  • モジラ

またはブールフラグを取得します。ブラウザがMSIEの場合、$。browser.msieはtrueになります。

バージョン番号については、メジャーリリース番号のみに関心がある場合-parseInt($。browser.version、10)を使用できます。$ .browser.version文字列を自分で解析する必要はありません。

とにかく、$。supportプロパティは、$。browserに依存するのではなく、特定の機能のサポートを検出するために使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.