83

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

私の問題は次のとおりです。HTML ドキュメントに、クリックすると、あらゆる種類の Internet Explorer と互換性のない JavaScript 関数を呼び出す領域があります。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 ブラウザーを検出する方法もありますか?

4

13 に答える 13

94

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

非常に具体的なチェックが行われるようになったため、コードに追加の var isIE10 は必要ないことに注意してください。

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

于 2015-08-01T03:42:53.887 に答える
31

理由はわかりませんが、他の人が話しているように userAgent に「Edge」が表示されないため、一部の人を助ける可能性のある別のルートを取らなければなりませんでした。

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

ブラウザーが IE11 または Edge であると判断した後、navigator.appVersion を調べました。IE11 では、文字列がかなり長く、内部に多くの情報が含まれていることに気付きました。Edge の navigator.appVersion には絶対にない「Trident」という単語を勝手に選びました。この単語のテストにより、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;          
}
于 2015-08-20T00:45:14.377 に答える
11

トピックは少し古いですが、ここのスクリプトは Firefox を False Positive (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);
}
于 2016-04-18T08:23:08.277 に答える