web-dev-qa-db-ja.com

JavaScriptを使用してInternet Explorer(IE)とMicrosoft Edgeを検出するにはどうすればよいですか?

私はよく調べましたが、Internet Explorerを検出する方法はたくさんあることを理解しています。

私の問題はこれです:クリックすると、どんな種類のInternet Explorerとも互換性のないJavaScript関数を呼び出すHTMLドキュメントの領域があります。 IEが使用されているかどうかを検出し、使用されている場合は、変数をtrueに設定します。

問題は、Notepad ++からコードを作成しているため、ブラウザーでHTMLコードを実行すると、IEを検出する方法が機能しないことです。問題は、Notepad ++で実行していることだと思います。 IEを検出できるようにする必要があるため、変数に基づいて、サイトのその領域を無効にできます。私はこれを試しました:

var isIE10 = false;

if (navigator.userAgent.indexOf("MSIE 10") > -1) {
    // this is internet Explorer 10
    isIE10 = true;
   window.alert(isIE10);
}

var isIE = (navigator.userAgent.indexOf("MSIE") != -1);

if(isIE){
    if(!isIE10){
    window.location = 'pages/core/ie.htm';
    }
}

しかし、それは機能しません。 Notepad ++からIEを検出するにはどうすればよいですか?それは私がHTMLをテストしているものですが、それで動作するメソッドが必要です。

編集する

誰かがこれを重複としてマークしていることに気付きましたが、それは理解できます。私ははっきりしていなかったと思います。私はJQueryの回答を使用できないため、Vanilla JSの回答を求めているので、これは複製ではありません。

編集#2

Microsoft Edgeブラウザーを検出する方法もありますか?

64
user5171952

理由はわかりませんが、他の人が話しているようにuserAgentに「エッジ」が表示されないため、一部の人々を助ける別のルートを選択する必要がありました。

Navigator.userAgentを見る代わりに、navigator.appNameを見て、IE <= 10であるかIE11およびEdgeであるかを区別しました。 IE11およびEdgeは「Netscape」のappNameを使用しますが、他のすべての反復では「Microsoft Internet Explorer」を使用します。

ブラウザがIE11またはEdgeのいずれかであることを確認した後、navigator.appVersionを探しました。 IE11では、文字列がかなり長く、その中に多くの情報があることに気付きました。 Edgeのnavigator.appVersionにはない「Trident」という単語を任意に選択しました。このWordのテストにより、この2つを区別することができました。

以下は、ユーザーが使用しているInternet Explorerの数値を返す関数です。 Microsoft Edgeの場合、12を返します。

幸運を祈ります。これがお役に立てば幸いです!

function Check_Version(){
    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer'){

       var ua = navigator.userAgent,
           re  = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})");

       if (re.exec(ua) !== null){
         rv = parseFloat( RegExp.$1 );
       }
    }
    else if(navigator.appName == "Netscape"){                       
       /// in IE 11 the navigator.appVersion says 'trident'
       /// in Edge the navigator.appVersion does not say trident
       if(navigator.appVersion.indexOf('Trident') === -1) rv = 12;
       else rv = 11;
    }       

    return rv;          
}
27
skribbz14

IEおよびEdgeを確認する方法を知っている最新の正しい方法を次に示します。

if (/MSIE 10/i.test(navigator.userAgent)) {
   // This is internet Explorer 10
   window.alert('isIE10');
}

if (/MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent)) {
    // This is internet Explorer 9 or 11
    window.location = 'pages/core/ie.htm';
}

if (/Edge\/\d./i.test(navigator.userAgent)){
   // This is Microsoft Edge
   window.alert('Microsoft Edge');
}

コードで特別なチェックを行うため、コードに余分な変数isIE10が必要ないことに注意してください。

また、このページの最新のIEおよびEdgeユーザーエージェント文字列についても確認してください。この回答は、ある時点で古くなる可能性があるためです。 https://msdn.Microsoft.com/en-us/library/ hh869301%28v = vs.85%29.aspx

80
Sceptic
// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
    ... do something
}

説明:

document.documentMode

IEのみのプロパティ。IE8で最初に使用可能になりました。

/Edge/

文字列「Edge」を検索するための正規表現-次に、「navigator.userAgent」プロパティに対してテストします

20
Chris Halcrow

UAParserを使用しています https://github.com/faisalman/ua-parser-js

var a = new UAParser();
var name = a.getResult().browser.name;
var version = a.getResult().browser.version;
13
Oren Gal

トピックは少し古いですが、ここのスクリプトはFirefoxをFalse Positive(Edge v12)として検出するため、使用するバージョンは次のとおりです。

function isIEorEDGE(){
  if (navigator.appName == 'Microsoft Internet Explorer'){
    return true; // IE
  }
  else if(navigator.appName == "Netscape"){                       
     return navigator.appVersion.indexOf('Edge') > -1; // Edge
  }       

  return false;
}

もちろん、より簡潔な方法で記述できます。

function isIEorEDGE(){
  return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1);
}
11
GavinoGrifoni

この機能は完璧に機能しました。 Edgeも検出します。

もともとこのCodepenから:

https://codepen.io/gapcode/pen/vEJNZN

/**
 * detect IE
 * returns version of IE or false, if browser is not Internet Explorer
 */
function detectIE() {
  var ua = window.navigator.userAgent;

  // Test values; Uncomment to check result …

  // 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 (Spartan)
  // 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 msie = ua.indexOf('MSIE ');
  if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  }

  var trident = ua.indexOf('Trident/');
  if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  }

  var Edge = ua.indexOf('Edge/');
  if (Edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(Edge + 5, ua.indexOf('.', Edge)), 10);
  }

  // other browser
  return false;
}

その後、コードでif (detectIE()) { /* do IE stuff */ }を使用できます。

6
phocks

MSブラウザを使用しているユーザーに警告などを表示するだけの場合は、このコードが適しています。

HTML:

<p id="IE">You are not using a Microsoft browser</p>

Javascript:

using_ms_browser = navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1) || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Trident') > -1);

if (using_ms_browser == true){
    document.getElementById('IE').innerHTML = "You are using a MS browser"
}

@GavinoGrifoniに感謝

5
patchie

私にとってこれは良い:

var uA = window.navigator.userAgent,
    onlyIEorEdge = /msie\s|trident\/|Edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
    checkVersion = (onlyIEorEdge && +(/(Edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;

実行してください: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/

2
James Peter

この断片を使用してください:var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;

2

以下は、IE10、IE11、およびEdgeを検出するjavascriptクラスです。
Navigatorオブジェクトはテスト目的で挿入されます。

var DeviceHelper = function (_navigator) {
    this.navigator = _navigator || navigator;
};
DeviceHelper.prototype.isIE = function() {
    if(!this.navigator.userAgent) {
        return false;
    }

    var IE10 = Boolean(this.navigator.userAgent.match(/(MSIE)/i)),
        IE11 = Boolean(this.navigator.userAgent.match(/(Trident)/i));
    return IE10 || IE11;
};

DeviceHelper.prototype.isEdge = function() {
    return !!this.navigator.userAgent && this.navigator.userAgent.indexOf("Edge") > -1;
};

DeviceHelper.prototype.isMicrosoftBrowser = function() {
    return this.isEdge() || this.isIE();
};
0
Tomas Prado