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


82

私はよく見てきましたが、InternetExplorerを検出する方法はたくさんあることを理解しています。

私の問題はこれです:クリックすると、あらゆる種類のInternetExplorerと互換性のない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の回答を使用できないため、バニラJSの回答を求めているため、これは重複していません。

編集#2

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


2
IE固有のコードを作成する代わりに、IEやその他のブラウザーでコードを機能させる方がはるかに簡単です。
イブ2015

1
関数をIEで機能するように修正できない場合、機能の検出は、ブラウザーの検出よりもはるかに優れたコード記述方法であるとほとんどの人が考えています。さらに、ブラウザの変更に伴う上位互換性がはるかに優れています。たとえば、Microsoftの最新ブラウザであるEdgeで何をしたいのかをすでに知っていますか。
jfriend00 2015

1
jQueryの重複の可能性:ユーザーがIEを使用しているかどうかを 確認し、リンクを確認します。多くの解決策があります
num8er 2015

以下の回答のいずれかがあなたの質問に答えた場合、このサイトの仕組みは機能し、あなたは答えを「受け入れる」でしょう、もっとここに:誰かが私の質問に答えたとき私は何をすべきですか?しかし、あなたの質問が本当に答えられた場合に限ります。そうでない場合は、質問に詳細を追加することを検討してください。
baao 2015

私の回答にエッジ検出を追加し、最新バージョンを確認できる便利なリンクも追加しました。
懐疑的な2015

回答:


31

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

navigator.userAgentを確認する代わりに、navigator.appNameを確認して、IE <= 10であるか、IE11とEdgeであるかを区別しました。IE11とEdgeは「Netscape」のappNameを使用しますが、他のすべての反復は「MicrosoftInternetExplorer」を使用します。

ブラウザがIE11またはEdgeのいずれかであると判断した後、navigator.appVersionを調べました。IE11では、文字列がかなり長く、内部に多くの情報が含まれていることに気付きました。私は「Trident」という単語を恣意的に選びましたが、これはEdgeのnavigator.appVersionには絶対に含まれていません。この単語をテストすることで、2つを区別することができました。

以下は、ユーザーが使用しているInternetExplorerの数値を返す関数です。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;          
}

7
これは、エッジとFirefoxの両方で12を返しています。
edencorbin 2016年

@edencorbinこの問題を処理する回答を以下に投稿しました。stackoverflow.com/a/36688806/2304450
GavinoGrifoni 2016

4
これは動作しません。Chromeでは、Opera、Firefox、および(おそらく)Safarinavigator.appName == "Netscape"がtrueと評価されます。
ジャックギ

2
同上。Chrome、Opera、Firefox、Safariで失敗
BBaysinger 2018

91

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');
}

現在、非常に特殊なチェックを行うため、コードに追加のvarisIE10は必要ないことに注意してください。

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


2
FWIW、navigator.userAgentWin10 / Edge VMをチェックインすると、"Edge"文字列を含まない最初の部分しか取得できません。
デイブニュートン

1
ウィッチバージョンのEdgeを使用していますが、ここに投稿できますか?
懐疑的な2015

私が使用しているのVirtualBox 5.0.2 R 102096を、画像が命名されたマイクロソフトEdge.Win10.For.Mac.VirtualBox.zip 2015年8月27日月曜日にMSのサイトからダウンロードした画像をデスクトップの背景は言うビルド10240、エッジのホームページを[設定]に20.10240.16384.0と表示されている、「このVMの最新ビルド20150801」を使用していると表示されます
デイブニュートン

ありがとう、navigator.userAgent文字列?
懐疑的な2015

1
完全な文字列ではなく、「Mozilla / 5.0(Windows NT 10.0; Win64; x64)」として返されます。IIRC VM /イメージの問題に関する別のSOの質問を見つけました。
デイブニュートン

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

説明:

document.documentMode

IE8で最初に利用可能になったIEのみのプロパティ。

/Edge/

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

2020年3月の更新

@Jamは、Edgeの最新バージョンがEdgユーザーエージェントとして報告するようになったとコメントしています。したがって、チェックは次のようになります。

if (document.documentMode || /Edge/.test(navigator.userAgent) || /Edg/.test(navigator.userAgent)) {
    ... do something
}

2
これは、IEとEdgeの両方で私のために働いているこのページの唯一のものです。
メロマン2018

1
/Edge\//.test(navigator.userAgent) より堅牢にするために、バックスラッシュを含めることをお勧めします。
JJ

1
Edgeの最新バージョンでは、ユーザーエージェントのEdgだけです。だから、IE、エッジとエッジクロムのためのテスト、およびスラッシュを含めた:document.documentMode || /Edge\//.test(navigator.userAgent) || /Edg\//.test(navigator.userAgent)
ジャム

「Edg」UA文字列でEdgeを検出する必要はないと思います。これは、Chromiumベースであり、おそらく検出されたくないためです(EdgeHTMLとは対照的)
Andrey

15

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

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

2
一般に、機能の検出はブラウザの検出よりも優れています。そうは言っても、本当にブラウザを検出する必要がある場合は、ライブラリを使用します(ここで提案されているように)。ユーザーエージェント文字列の解析には多くの複雑さがあり、ライブラリは間違いのリスクを減らします。
sandstrom 2015年

非常に役に立ちました。他のどのソリューションも機能しませんでした。このプラグインは私にとって完全に機能しました。
edencorbin 2016年

11

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

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

  return false;
}

もちろん、これはより簡潔な方法で書くことができます。

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

エッジに対してfalseを返します
クリームホイップ飛行機

@CreamWhippedAirplaneは、ご使用のバージョンのEdgeによって指定されたnavigator.appNameの結果をここに投稿できますか?たぶん彼らは最近それを変更しました
GavinoGrifoni 2016

@CreamWhippedAirplaneは変更されたようですnavigator.appVersion。現在、「Trident」は含まれていませんが、代わりに名前に「Edge」が適切に追加されています。今すぐ私の答えを更新します!
GavinoGrifoni 2016

browserstack.comでテストした場合、これは機能しませんでした。実際のマシンで機能するかどうかはわかりません。しかし、browserstackではNetscapeappNameとして取得しました...–
Betty St

4
IE 11では失敗します。IE11はアプリ名として「Netscape」のみを指定するため、条件に失敗します
Ankur Aggarwal 2016年

8

この機能は私にとって完璧に機能しました。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 */ }、コードで使用できます。


このページの2019年の他のソリューションで私のために働いていたこれは、IE 11のためのFirefox用の偽陽性、あるいは偽陰性を与えた
メリッサ・フリーマン

6

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に感謝します



2

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


3
三元操作は冗長ですが、これは私にとって最適に機能しました。navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1trueまたはfalseに評価されるため、それを返す/使用することができます。
コルビー2017年

2

ブラウザを検出するための1行のコード。

ブラウザがIEまたはEdgeの場合、trueを返します。

let isIE = /edge|msie\s|trident\//i.test(window.navigator.userAgent)

0

これは、IE10、IE11、およびEdgeを検出するjavascriptクラスです。
ナビゲーターオブジェクトは、テスト目的で挿入されます。

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

Edgeを確認する必要がある場合は、これを使用してください

if(navigator.userAgent.indexOf( "Edge")> 1){

//do something

}


-4

まず第一に、それは確かにNotepad ++の問題ではありません。その「文字列照合の問題

すべてのIEバージョンに共通する文字列はMSIEです。http: //www.useragentstring.com/pages/Internet%20Explorer/でさまざまなuserAgent文字列を確認してください。

if(navigator.userAgent.indexOf("MSIE") != -1){
   alert('I am Internet Explorer!!');
}

これを試しましたが、機能しません。IEのnotepad ++からコードを実行しましたが、アラートはありませんでした。デバッガコンソールを確認しましたが、エラーはありませんでした。私は

使用しているIEのバージョンは何ですか?
Amit Prabhu Parrikar 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.