216

IE を検出したいときは、次のコードを使用します。

function getInternetExplorerVersion()
{
  var rv = -1;
  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 )
  {
    msg = "You are using IE " + ver;
  }
  alert( msg );
}

しかし、IE11 は「Internet Explorer を使用していません」と返します。どうすれば検出できますか?

4

16 に答える 16

225

IE11 は として報告しなくなりました。この変更リストにMSIEよると、誤検出を避けるために意図的に行われています。

IEであることを本当に知りたい場合にできることはTrident/、ユーザー エージェントで文字列を検出することです。navigator.appNameNetscape

function getInternetExplorerVersion()
{
  var rv = -1;
  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 );
  }
  else 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 );
  }
  return rv;
}

console.log('IE version:', getInternetExplorerVersion());

IE11 (afaik) はまだプレビュー段階であり、ユーザー エージェントはリリース前に変更される可能性があることに注意してください。

于 2013-07-28T11:03:26.233 に答える
47

MSInputMethodContext機能検出チェックの一部として使用します。例えば:

//Appends true for IE11, false otherwise
window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;

参考文献

于 2014-02-27T22:52:19.077 に答える
15

私はあなたの答えを読んで、ミックスを作りました。Windows XP(IE7/IE8)、Windows 7(IE9/IE10/IE11)で動作するようです。

function ie_ver(){  
    var iev=0;
    var ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
    var trident = !!navigator.userAgent.match(/Trident\/7.0/);
    var rv=navigator.userAgent.indexOf("rv:11.0");

    if (ieold) iev=new Number(RegExp.$1);
    if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
    if (trident&&rv!=-1) iev=11;

    return iev;         
}

もちろん、0 を返す場合は、IE がないことを意味します。

于 2013-12-28T13:48:35.687 に答える
13

ユーザー エージェントから IE のバージョンを取得する

var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}

仕組み:すべての IE バージョンのユーザー エージェント文字列には、"MSIE space version " または "Trident other-text rv space-or-colon version " の部分が含まれています。これを知って、String.match()正規表現からバージョン番号を取得します。コードを短縮するtry-catchためにブロックが使用されます。それ以外の場合は、非 IE ブラウザーの配列境界をテストする必要があります。

注:ユーザー エージェントは、ユーザーがブラウザーを「互換モード」に設定している場合、意図せずに偽装または省略される可能性があります。これは実際にはあまり問題にならないように見えますが。


User-Agent なしで IE のバージョンを取得する

var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 : 
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 : 
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );

仕組み: IE の各バージョンでは、以前のバージョンにはない追加機能のサポートが追加されています。したがって、トップダウン方式で機能をテストできます。ここでは簡潔にするために3 項if-thenシーケンスが使用されていますが、switchステートメントも同様に機能します。変数ieは 5 ~ 11 の整数に設定されます。古い場合は 1、新しい/非 IE の場合は 99 です。IE 1-11 を正確にテストするだけの場合は、0 に設定できます。

注:コードがdocument.addEventListener. このような状況では、ユーザー エージェントが最適なオプションです。


ブラウザがモダンかどうかを検出する

ブラウザーがほとんどの HTML 5 および CSS 3 標準をサポートしているかどうかのみに関心がある場合は、IE 8 以前が依然として主要な問題のアプリであると想定できます。をテストするwindow.getComputedStyleと、最新のブラウザー (IE 9、FF 4、Chrome 11、Safari 5、Opera 11.5) もかなりうまくミックスされます。IE 9 では標準のサポートが大幅に改善されていますが、ネイティブ CSS アニメーションには IE 10 が必要です。

var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) ); 
于 2015-06-18T05:54:37.833 に答える
7

解決 :

function GetIEVersion() {
  var sAgent = window.navigator.userAgent;
  var Idx = sAgent.indexOf("MSIE");
  // If IE, return version number.
  if (Idx > 0)
    return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));

  // If IE 11 then look for Updated user agent string.
  else if (!!navigator.userAgent.match(/Trident\/7\./))
    return 11;

  else
    return 0; //It is not IE

}
if ((GetIEVersion() > 0) || (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)){
  alert("This is IE " + GetIEVersion());
}else {
  alert("This no is IE ");
}		

于 2015-09-11T05:59:04.753 に答える
3

私はより簡単な方法を使用しています:

ナビゲーター グローバル オブジェクトにはプロパティ touchpoints があり、Internet Exlorer 11 では msMaxTouchPoints と呼ばれます。

したがって、次を探す場合:

navigator.msMaxTouchPoints !== void 0 

Internet Explorer 11 が表示されます。

于 2014-06-23T01:39:59.283 に答える
2
var ua = navigator.userAgent.toString().toLowerCase();
var match = /(trident)(?:.*rv:([\w.]+))?/.exec(ua) ||/(msie) ([\w.]+)/.exec(ua)||['',null,-1];
var rv = match[2];
return rv;
于 2013-08-12T01:18:23.933 に答える
1

これはより良い方法のようです。"indexOf" は、一致するものがない場合、-1 を返します。本体の既存のクラスを上書きするのではなく、追加するだけです。

// add a class on the body ie IE 10/11
var uA = navigator.userAgent;
if(uA.indexOf('Trident') != -1 && uA.indexOf('rv:11') != -1){
    document.body.className = document.body.className+' ie11';
}
if(uA.indexOf('Trident') != -1 && uA.indexOf('MSIE 10.0') != -1){
    document.body.className = document.body.className+' ie10';
}
于 2014-07-16T09:45:55.953 に答える
0

onscrollスクロールバーのある要素でイベントを使用しました。IE でトリガーされたときに、次の検証を追加しました。

onscroll="if (document.activeElement==this) ignoreHideOptions()"
于 2015-04-08T13:37:52.990 に答える