JavaScriptでIEバージョン(v9より前)を検出する


246

私たちのWebサイトのユーザーがInternet Explorerv9より前のバージョンを使用している場合、エラーページに移動させたいのですが。支援するのに私たちの時間とお金の価値はありませんIE pre-v9。他のすべてのIE以外のブラウザのユーザーは問題なく、バウンスされるべきではありません。提案されたコードは次のとおりです。

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}

このコードはうまくいきますか?

おそらく私の方法で来るいくつかのコメントを控えるために:

  1. はい、私はユーザーがuseragent文字列を偽造できることを知っています。私は心配していません。
  2. はい、プログラミングの専門家はブラウザタイプではなく機能サポートを探していることを知っていますが、この場合、このアプローチが理にかなっているとは思いません。すべての(関連する)IE以外のブラウザーが私が必要とする機能をサポートし、すべてのpre-v9 IEブラウザーがサポートしていないことをすでに知っています。サイト全体で機能ごとにチェックするのは無駄です。
  3. はい、私はIE v1(または20以上)を使用してサイトにアクセスしようとする人が 'badBrowser'をtrueに設定せず、警告ページが適切に表示されないことを知っています。それは私たちが喜んで取るリスクです。
  4. はい、私はマイクロソフトがブラウザの正確なバージョン検出に使用できる「条件付きコメント」を持っていることを知っています。IEはから条件付きコメントをサポートしなくなったためIE 10、このアプローチはまったく役に立たなくなりました。

注意すべき他の明らかな問題はありますか?


122
「IE pre-v9をサポートするだけの時間と費用はかかりません」できればいいのに。
Hassan

2
ポイント[2]に基づいて、Modernizr(en.wikipedia.org/wiki/Modernizr)はお勧めしません-誰もが砂のどこかに線を引く必要があります-しかしIE9は高い線のように見えます
amelvin

1
条件付きコメントは通常のコメントです。IEのみがそれらを特別なものとして解釈します。IE10 +はもうそれをしません。
Andreas

3
条件付きコメントは、IE 10では非IEブラウザーとまったく同じように扱われます。それらは有効なHTMLコメントなので、そのように扱われます。私はアンドレアスに同意し、条件付きコメントが先の方法だと思います。
Tim Down

1
IE10 +が条件付きコメントをサポートしないと述べている公式のドキュメント:blogs.msdn.com/b/ie/archive/2011/07/06/…-おかげで:stackoverflow.com/a/9900331/320399
blong

回答:


354

これは私の好みの方法です。それは最大限のコントロールを与えます。(注:条件付きステートメントは、IE5-9でのみサポートされます。)

まず、IEクラスを正しく設定します

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->    
<head>

次に、CSSを使用してスタイルの例外を作成するか、必要に応じて簡単なJavaScriptを追加します。

(function ($) {
    "use strict";

    // Detecting IE
    var oldIE;
    if ($('html').is('.lt-ie7, .lt-ie8, .lt-ie9')) {
        oldIE = true;
    }

    if (oldIE) {
        // Here's your JS for IE..
    } else {
        // ..And here's the full-fat code for everyone else
    }

}(jQuery));

ポールアイリッシュに感謝します。


21
OPが純粋にJavaScriptソリューションを要求したことを考えると、既存のHTMLを変更する必要がなく、jQueryを使用していないため、以下の@Tim Downの回答の方が優れていると思います:stackoverflow.com/a/10965203/134120
AsGoodAsItGet

私はW3 HTMLバリにこれでエラーを取得する:Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
abumalick

161

IEのバージョンを返すか、IEでない場合はfalseを返します

function isIE () {
  var myNav = navigator.userAgent.toLowerCase();
  return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

例:

if (isIE () == 8) {
 // IE8 code
} else {
 // Other versions IE or not IE
}

または

if (isIE () && isIE () < 9) {
 // is IE version less than 9
} else {
 // is IE 9 and later or not IE
}

または

if (isIE()) {
 // is IE
} else {
 // Other browser
}

36
IE11では機能しません。IE 11から、彼らはUA文字列を"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
アニー

22
FFでは「false <9」は「true」であることに注意してください。したがって、条件はif (isIE () && isIE () < 9) {
次のとおり

3
@DeadlyChambersはおそらくIE7標準モードで実行されていましたか?msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
mason81

4
承認された答えは、HTMLでIEバージョンを検出する方法です。これは元の質問に答えます。
Matt Wagner

2
@PrasadGayan-Microsoft EdgeはInternet Explorerではありません。したがって、falseを返すのは正しいことのようです。
BryanGrezeszak 2017年

120

他の誰もaddEventLister-メソッドを追加しておらず、正しいブラウザモードを使用している場合は、次のコマンドでIE 8以下を確認できます。

if (window.attachEvent && !window.addEventListener) {
    // "bad" IE
}

従来のInternet ExplorerとattachEvent(MDN)


7
これはJavaScriptでIE <= 8を完全に検出するための最も効率的な方法のようです-それを行う方法を探していた私のような人々に最適です。
Gregory Magarshak 2013年

すごい!これはまた、私が探していたQuirksモードでIE9を検出します。
sstur 14

7
これは「使いやすい」ソリューションですが、いくつかのリスクがあります。社内の(ソリューションを認識していない)だれでも「addEventListener」または「attachEvent」を実装して、IE 8での欠如に対処できます。そうすると、コードが機能しなくなります。
ゼ・カルロス

@RoyiNamirこれはIE8をテストします。なぜIE11でtrueを返す必要があるのですか?
アンドレアス

@Andreasおっと。OPがie9より前に望んでいることはわかりませんでした。削除しています。
Royi Namir、2015

114

条件付きコメントを使用します。IE <9のユーザーを検出しようとしていて、条件付きコメントがそれらのブラウザーで機能します。他のブラウザー(IE> = 10および非IE)では、コメントは通常のHTMLコメントとして扱われます。

HTMLの例:

<!--[if lt IE 9]>
WE DON'T LIKE YOUR BROWSER
<![endif]-->

必要に応じて、スクリプトでこれを行うこともできます。

var div = document.createElement("div");
div.innerHTML = "<!--[if lt IE 9]><i></i><![endif]-->";
var isIeLessThan9 = (div.getElementsByTagName("i").length == 1);
if (isIeLessThan9) {
    alert("WE DON'T LIKE YOUR BROWSER");
}

5
@Tim Downの答えのJavaScriptバージョンは私にとってはうまくいきました。BrowserStackを使用して、Windows 7およびIE 8、9、10、11でテストしました。Mac OS X Snow Leopard、Safari 5.1、Firefox 28.0、Chrome 33.0、Opera 20.0、iPhone 5 Mobile Safari; およびAndroid Samsung Galaxy Tab 2 10.1 4.0。予想通り、IE8のみがIeLessThan9であると報告しました。いいね!
Steve Saporta 14年

58

MSIE(v6-v7-v8-v9-v10-v11)を簡単に検出するには:

if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
   // MSIE
}

条件付きコメントをサポートしていないため、IE10の検出に役立ちます。IE11では機能しませんが、IE11は通常大丈夫です
personne3000

11
最後に、特徴検出の使用について説明せず、実際に質問に答える答え。
cdmckay 14

32

AngularJS がIEをチェックする方法は次のとおりです

/**
 * documentMode is an IE-only property
 * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 */
var msie = document.documentMode;

if (msie < 9) {
    // code for IE < 9
}

これは、すべての条件付きコメントよりもはるかに簡単です。これに制限はありませんか?
andrewb 2015

ドキュメントによると、IE8 +はこのプロパティをサポートしているので、ほとんどの場合十分であると思います。
iurii 2015

MSDNのリファレンスによれば、「現在のドキュメントがまだ決定されていない場合、documentModeはゼロ(0)の値を返します。これは通常、ドキュメントの読み込み中に発生します。」これは、<head>に読み込まれたスクリプト内で有効な応答が得られない可能性があることを意味しますか?
Erik Knowles

ドキュメントが既に読み込まれているときにwindow.onloadの値を確認することで修正できると思います。
iurii 2015

28

IE8以前を確実にフィルタリングするには、グローバルオブジェクトのチェックを使用できます。

if (document.all && !document.addEventListener) {
    alert('IE8 or lower');
}

2
document.all-IE 11ではサポートされていません -msdn.microsoft.com/en-us/library/ie/ms537434%28v=vs.85%29.aspx
Raja Khoury

2
@RajaKhoury-IE <9をテストする場合は問題ありません-if条件がfalseになります。
nnnnnn 2017年

19

機能検出を使用したIEバージョンの検出(IE6 +、IE6より前のブラウザーは6として検出されます)、非IEブラウザーの場合はnullを返します:

var ie = (function (){
    if (window.ActiveXObject === undefined) return null; //Not IE
    if (!window.XMLHttpRequest) return 6;
    if (!document.querySelector) return 7;
    if (!document.addEventListener) return 8;
    if (!window.atob) return 9;
    if (!document.__proto__) return 10;
    return 11;
})();

編集:私はあなたの便宜のためにbower / npmリポジトリを作成しました:ie-version

更新:

よりコンパクトなバージョンは、次のように1行で記述できます。

return window.ActiveXObject === undefined ? null : !window.XMLHttpRequest ? 6 : !document.querySelector ? 7 : !document.addEventListener ? 8 : !window.atob ? 9 : !document.__proto__ ? 10 : 11;

16

この関数は、IEのメジャーバージョン番号を整数として返すundefinedか、ブラウザーがInternet Explorerでない場合に返します。これは、すべてのユーザーエージェントソリューションと同様に、ユーザーエージェントのなりすましの影響を受けます(バージョン8以降、IEの公式機能です)。

function getIEVersion() {
    var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:)(\d+)/);
    return match ? parseInt(match[1]) : undefined;
}

オーエン、それを実際にどのように使用するのですか?どのようにして戻り値を取得しますか?私が試したconsole.log(!!match && parseInt(match[1]))console.log(parseInt(match[1]))そしてconsole.log(match)、それらのどれかを持つ結果。
Frank Conijn、2014年

関数自体を呼び出して戻り値を取得しますgetIEVersion()。例:if (getIEVersion() < 9) {/* IE 8 or below */} if (!getIEVersion()) {/* Not IE */}
オーウェン

15

条件付きコメントを使用してJSでIEを検出する

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>=5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie > 7 // IE8, IE9 ...
//     ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

それは私の答えとほとんど同じです。
Tim Down

@TimDown:たぶん、しかし、この回答はもう少し機能が充実しており(バージョン番号を教えてくれます)、よくコメントされています。さらに、この回答の冒頭にあるリンクは、このテクニックに関するいくつかの有益なコメントと興味深いバリエーションを持つ要旨につながります。
アラン

@アラン:フェアポイント。私は私の質問に合わせて調整しましたが、出典を引用しませんでした。
Tim Down

12

これは私にとってはうまくいきます。私は<IE9が嫌いな理由を説明するページへのリダイレクトとして使用し、好みのブラウザーへのリンクを提供しています。

<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;URL=http://google.com">
<![endif]-->

1
ああ、それは厄介な問題です。私はよりフレンドリーな方法を使用して、IE警告の外観でdivを表示し、訪問者がそれをクリックすると、ユーザーはbrowsehappy.comにアクセスします
Codebeat

10

あなたのコードはチェックを実行できますが、誰かがIE v1または> v19を使用してページにアクセスしようとした場合、エラーは発生しないので、以下のコードのようなRegex式を使用してより安全にチェックできます。

var userAgent = navigator.userAgent.toLowerCase();
// Test if the browser is IE and check the version number is lower than 9
if (/msie/.test(userAgent) && 
    parseFloat((userAgent.match(/.*(?:rv|ie)[\/: ](.+?)([ \);]|$)/) || [])[1]) < 9) {
  // Navigate to error page
}

これは良い答えではありません。UAスニッフィングは信頼できません。詳細はこちら:modernizr.com/docs
Jezen Thomas

3
@Jezen時々 、UA-スニッフィングは、移動するための方法は次のとおりです。github.com/Modernizr/Modernizr/issues/538
イシュトUjj-Mészáros

8

Microsoftのリファレンスページに記載されているように、バージョン10以降、条件付きコメントはIEでサポートされなくなりました。

var ieDetector = function() {
  var browser = { // browser object

      verIE: null,
      docModeIE: null,
      verIEtrue: null,
      verIE_ua: null

    },
    tmp;

  tmp = document.documentMode;
  try {
    document.documentMode = "";
  } catch (e) {};

  browser.isIE = typeof document.documentMode == "number" || eval("/*@cc_on!@*/!1");
  try {
    document.documentMode = tmp;
  } catch (e) {};

  // We only let IE run this code.
  if (browser.isIE) {
    browser.verIE_ua =
      (/^(?:.*?[^a-zA-Z])??(?:MSIE|rv\s*\:)\s*(\d+\.?\d*)/i).test(navigator.userAgent || "") ?
      parseFloat(RegExp.$1, 10) : null;

    var e, verTrueFloat, x,
      obj = document.createElement("div"),

      CLASSID = [
        "{45EA75A0-A269-11D1-B5BF-0000F8051515}", // Internet Explorer Help
        "{3AF36230-A269-11D1-B5BF-0000F8051515}", // Offline Browsing Pack
        "{89820200-ECBD-11CF-8B85-00AA005B4383}"
      ];

    try {
      obj.style.behavior = "url(#default#clientcaps)"
    } catch (e) {};

    for (x = 0; x < CLASSID.length; x++) {
      try {
        browser.verIEtrue = obj.getComponentVersion(CLASSID[x], "componentid").replace(/,/g, ".");
      } catch (e) {};

      if (browser.verIEtrue) break;

    };
    verTrueFloat = parseFloat(browser.verIEtrue || "0", 10);
    browser.docModeIE = document.documentMode ||
      ((/back/i).test(document.compatMode || "") ? 5 : verTrueFloat) ||
      browser.verIE_ua;
    browser.verIE = verTrueFloat || browser.docModeIE;
  };

  return {
    isIE: browser.isIE,
    Version: browser.verIE
  };

}();

document.write('isIE: ' + ieDetector.isIE + "<br />");
document.write('IE Version Number: ' + ieDetector.Version);

次に使用します:

if((ieDetector.isIE) && (ieDetector.Version <= 9))
{

}

1
これは、ネット全体で機能した唯一のものであり、少なくとも私が試したもののフモンガス... thx;)
Henrique C.

このコードは適切ですが、互換表示モードを検出できません。私はIE 8の互換性ビューを使用しているIE 11を使用していますが、このコードはまだversion 11編集を提供しています:このコードは素晴らしいです!ハハ、それはすべてが中にあるオブジェクトを与えます。バージョンは11ですが、docModeIRは9です。ありがとうございます。
MarceloBarbosa 2015

5

つまり、10と11の場合:

jsを使用してhtmlにクラスを追加すると、条件付きコメントの標準を維持できます

  var ua = navigator.userAgent,
      doc = document.documentElement;

  if ((ua.match(/MSIE 10.0/i))) {
    doc.className = doc.className + " ie10";

  } else if((ua.match(/rv:11.0/i))){
    doc.className = doc.className + " ie11";
  }

または、クッパのようなlibを使用します。

https://github.com/ded/bowser

または特徴検出のためのmodernizr:

http://modernizr.com/


2
いくつかのスクリプトとソリューションを試しましたが、何も機能しませんでした。それから私はプロジェクトにクッパを含めました、そしてそれはちょうどうまくいきました。だからクッパを提案するために一つ。
Moulde、2015年

3

Internet Explorer 10 | 11を検出するには、bodyタグの直後に次の小さなスクリプトを使用できます。

私の場合、私は頭にロードされたjQueryライブラリを使用します。

<!DOCTYPE HTML>
<html>
<head>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
    <script>if (navigator.appVersion.indexOf('Trident/') != -1) $("body").addClass("ie10");</script>
</body>
</html>

以前のバージョンはサポートしていないため、10または11のみを検出する必要があります
Nearpoint

IE9もトライデントですが、CSSサポートとは異なります。あなたの検出は少なくとも10であると考えていますが、それは正しくありません。
Codebeat、2015

3

これは死の答えになっていますが、これで十分です。

!!navigator.userAgent.match(/msie\s[5-8]/i)

また、ここでは最も一般的なIEのユーザーエージェント文字列に対して正規表現パターンを示すサンドボックスは、次のとおりです。regex101.com/r/lC6oP3/1
ティモシー・ペレス

@alessadro-しかし、それはそうであるはずですよね?OPは9未満をテストしたかった
nnnnnn 2017年

2
var Browser = new function () {
    var self = this;
    var nav = navigator.userAgent.toLowerCase();
    if (nav.indexOf('msie') != -1) {
        self.ie = {
            version: toFloat(nav.split('msie')[1])
        };
    };
};


if(Browser.ie && Browser.ie.version > 9)
{
    // do something
}

2

Microsoftによると、以下が最善の解決策であり、それも非常に簡単です。

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat( RegExp.$1 );
    }
    return rv;
}

function checkVersion()
{
    var msg = "You're not using Internet Explorer.";
    var ver = getInternetExplorerVersion();

    if ( ver > -1 )
    {
        if ( ver >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
      }
    alert( msg );
}

実際、そして誰かが上記を使用しようとしてここに上陸した場合に備えて、後の回答のコードはIE11(stackoverflow.com/a/26375930/1129926)で機能します。しかし、注意してください、それはIE12などで動作しますか?結論としては、これらを一時的なハックと見なすのが最善であり、新しいブラウザバージョンがリリースされると、後で失敗する可能性があります(Edgeについては触れません)。
Jeff Mergler、2018

1

私はこのコードをしばらくの間書き換えないことをお勧めします。特定のIEバージョン、他のブラウザー、オペレーティングシステム、さらにはRetinaディスプレイの有無をテストできるConditionizrライブラリ(http://conditionizr.com/)を使用することをお勧めします。

必要な特定のテストのみのコードを含めると、多くの反復を経た(そしてコードを壊すことなく簡単にアップグレードできる)テスト済みライブラリの利点も得られます。

また、特定のブラウザーではなく特定の機能をテストした方がよいすべてのケースを処理できるModernizrとうまくメッシュします。


1

私はそれが好きです:

<script>
   function isIE () {
       var myNav = navigator.userAgent.toLowerCase();
       return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
   }    
   var ua = window.navigator.userAgent;
   //Internet Explorer | if | 9-11

   if (isIE () == 9) {
       alert("Shut down this junk! | IE 9");
   } else if (isIE () == 10){
       alert("Shut down this junk! | IE 10");
   } else if (ua.indexOf("Trident/7.0") > 0) {
       alert("Shut down this junk! | IE 11");
   }else{
       alert("Thank god it's not IE!");
   }

</script>

1

IEを検出するこのアプローチは、条件付きコメントを使用したjKeyの回答とユーザーエージェントを使用したOwenの回答の長所を組み合わせ、弱点を回避します。

  • jKeyのアプローチはバージョン9まで機能し、IE 8および9のユーザーエージェントスプーフィングの影響を受けません。
  • オーウェンのアプローチはIE 5および6(レポート7)で失敗する可能性があり、UAスプーフィングの影響を受けやすくなりますが、IEバージョン> = 10(オーウェンの回答の日付が後の12を含む)を検出できます。

    // ----------------------------------------------------------
    // A short snippet for detecting versions of IE
    // ----------------------------------------------------------
    // If you're not in IE (or IE version is less than 5) then:
    //     ie === undefined
    // Thus, to detect IE:
    //     if (ie) {}
    // And to detect the version:
    //     ie === 6 // IE6
    //     ie > 7 // IE8, IE9 ...
    // ----------------------------------------------------------
    var ie = (function(){
        var v = 3,
            div = document.createElement('div'),
            all = div.getElementsByTagName('i');
    
        while (
            div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
            all[0]
        );
        if (v <= 4) { // Check for IE>9 using user agent
            var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:|Edge\/)(\d+)/);
            v = match ? parseInt(match[1]) : undefined;
        }
        return v;
    }());

これは、IEバージョンを含むドキュメントに有用なクラスを設定するために使用できます。

    if (ie) {
        document.documentElement.className += ' ie' + ie;
        if (ie < 9)
            document.documentElement.className += ' ieLT9';
    }

IEが互換モードの場合、使用されている互換モードを検出することに注意してください。また、IEバージョンは古いバージョン(<10)で主に役立ちます。より高いバージョンはより標準に準拠しており、代わりにmodernizr.jsなどを使用して機能を確認する方が良いでしょう。


1

これに便利なアンダースコアミックスインを作成しました。

_.isIE();        // Any version of IE?
_.isIE(9);       // IE 9?
_.isIE([7,8,9]); // IE 7, 8 or 9?

_.mixin({
  isIE: function(mixed) {
    if (_.isUndefined(mixed)) {
      mixed = [7, 8, 9, 10, 11];
    } else if (_.isNumber(mixed)) {
      mixed = [mixed];
    }
    for (var j = 0; j < mixed.length; j++) {
      var re;
      switch (mixed[j]) {
        case 11:
          re = /Trident.*rv\:11\./g;
          break;
        case 10:
          re = /MSIE\s10\./g;
          break;
        case 9:
          re = /MSIE\s9\./g;
          break;
        case 8:
          re = /MSIE\s8\./g;
          break;
        case 7:
          re = /MSIE\s7\./g;
          break;
      }

      if (!!window.navigator.userAgent.match(re)) {
        return true;
      }
    }

    return false;
  }
});

console.log(_.isIE());
console.log(_.isIE([7, 8, 9]));
console.log(_.isIE(11));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>


1

または単に

//   IE 10: ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; 
//   IE 11: ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; 
// Edge 12: ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; 
// Edge 13: ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; 

var isIE = navigator.userAgent.match(/MSIE|Trident|Edge/)
var IEVersion = ((navigator.userAgent.match(/(?:MSIE |Trident.*rv:|Edge\/)(\d+(\.\d+)?)/)) || []) [1]

0

IEのバージョンを確認するために見つけた最も包括的なJSスクリプトは、http: //www.pinlady.net/PluginDetect/IE/です。ライブラリ全体はhttp://www.pinlady.net/PluginDetect/Browsers/にあります

IE10では、条件ステートメントはサポートされなくなりました。

IE11では、ユーザーエージェントにMSIEが含まれなくなりました。また、ユーザーエージェントの使用は変更できるため、信頼性がありません。

PluginDetect JSスクリプトを使用すると、特定のIEバージョンを対象とする非常に具体的で巧妙に作成されたコードを使用して、IEを検出し、正確なバージョンを検出できます。これは、使用しているブラウザーのバージョンを正確に確認する場合に非常に役立ちます。


0

私はここでのパーティーに少し遅れていることに気づきましたが、ブラウザーがIEであるかどうか、および10以降のバージョンをフィードバックするために、単純な1行の方法を調べていました。これをバージョン11用にコーディングしていないので、おそらく少しの修正が必要になるでしょう。

これはコードですが、プロパティとメソッドを持つオブジェクトとして機能し、ナビゲーターオブジェクト(なりすましの可能性があるため、非常に欠陥がある)をこするのではなく、オブジェクト検出に依存しています。

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

使用法はisIE.browser、ブール値を返し、条件付きコメントに依存するプロパティであり、5〜10 isIE.detectedVersion()の数値を返すメソッドを使用します。私は、6未満の値であり、あなたが深刻な古い学校の領域にあり、あなたはよりも何かが強くなると仮定していますワンライナーと10以上の何かとあなたはより新しい領域にいます。条件付きコメントをサポートしていないIE11について何か読んだことがありますが、完全には調査していません。

とにかく、そのままで、1つのライナーについては、IEブラウザーとバージョン検出の基本をカバーします。完璧とはほど遠いですが、小さく、簡単に修正できます。

参考までに、実際にこれを実装する方法について疑問がある場合は、次の条件式が役立つはずです。

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

/* testing IE */

if (isIE.browser) {
  alert("This is an IE browser, with a detected version of : " + isIE.detectedVersion());
}

0

IEとそのバージョンを検出するのは簡単ではありません。必要なのは、ネイティブ/バニラJavaScriptのビットです。

var uA = navigator.userAgent;
var browser = null;
var ieVersion = null;

if (uA.indexOf('MSIE 6') >= 0) {
    browser = 'IE';
    ieVersion = 6;
}
if (uA.indexOf('MSIE 7') >= 0) {
    browser = 'IE';
    ieVersion = 7;
}
if (document.documentMode) { // as of IE8
    browser = 'IE';
    ieVersion = document.documentMode;
}

そしてこれはそれを使う方法です:

if (browser == 'IE' && ieVersion <= 9) 
    document.documentElement.className += ' ie9-';

下位互換性ビュー/モードの上位バージョンを含むすべてのIEバージョンで動作し、documentModeIE独自のものです。


0

IEブラウザのバージョンを選択する必要がある場合は、以下のコードに従ってください。このコードは、IE6からIE11までのバージョンで適切に機能します。

<!DOCTYPE html>
<html>
<body>

<p>Click on Try button to check IE Browser version.</p>

<button onclick="getInternetExplorerVersion()">Try it</button>

<p id="demo"></p>

<script>
function getInternetExplorerVersion() {
   var ua = window.navigator.userAgent;
        var msie = ua.indexOf("MSIE ");
        var rv = -1;

        if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer, return version number
        {               
            if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) {
                //For IE 11 >
                if (navigator.appName == 'Netscape') {
                    var ua = navigator.userAgent;
                    var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
                    if (re.exec(ua) != null) {
                        rv = parseFloat(RegExp.$1);
                        alert(rv);
                    }
                }
                else {
                    alert('otherbrowser');
                }
            }
            else {
                //For < IE11
                alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
            }
            return false;
        }}
</script>

</body>
</html>

0

ウィンドウを実行するIE10はIE11 +に自動更新され、標準化されたW3Cになります

現在、IE8をサポートする必要はありません-

    <!DOCTYPE html>
    <!--[if lt IE 9]><html class="ie ie8"><![endif]-->
    <!--[if IE 9]><html class="ie ie9"><![endif]-->
    <!--[if (gt IE 9)|!(IE)]><!--><html><!--<![endif]-->
    <head>
        ...
        <!--[if lt IE 8]><meta http-equiv="Refresh" content="0;url=/error-browser.html"><![endif]--
        ...
    </head>

0
var isIE9OrBelow = function()
{
   return /MSIE\s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10;
}

0
if (!document.addEventListener) {
    // ie8
} else if (!window.btoa) {
    // ie9
}
// others
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.