如何使用JavaScript检测Internet Explorer(IE)和Microsoft Edge?

时间:2015-08-01 03:17:36

标签: javascript html internet-explorer media-queries microsoft-edge

我看了很多,我知道有很多方法可以检测到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浏览器吗?

13 个答案:

答案 0 :(得分:80)

以下是我了解如何检查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

答案 1 :(得分:27)

我不知道为什么,但我没有像其他人所说的那样在userAgent中看到“Edge”,所以我不得不采取另一种可能对某些人有帮助的途径。

我没有查看navigator.userAgent,而是查看了navigator.appName,以区分它是IE< = 10还是IE11和Edge。 IE11和Edge使用“Netscape”的appName,而每隔一次迭代使用“Microsoft Internet Explorer”。

在我们确定浏览器是IE11或Edge之后,我查看了navigator.appVersion。我注意到在IE11中,字符串很长,里面有很多信息。我随意挑出了“Trident”这个词,这个词肯定不在navigator.appVersion for Edge中。对这个词的测试让我能够区分这两个词。

下面是一个函数,它将返回用户所在的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;          
}

答案 2 :(得分:19)

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

说明:

document.documentMode

仅限IE的属性,首先在IE8中可用。

/Edge/

用于搜索字符串'Edge'的正则表达式 - 然后我们根据'navigator.userAgent'属性进行测试

答案 3 :(得分:13)

我正在使用UAParser https://github.com/faisalman/ua-parser-js

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

答案 4 :(得分:11)

主题有点旧,但由于这里的脚本将Firefox视为误报(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);
}

答案 5 :(得分:6)

这个功能非常适合我。它也检测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 :(得分:5)

如果您只想给使用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

答案 7 :(得分:2)

使用此剪辑:var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;

答案 8 :(得分:2)

对我来说更好:

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/

答案 9 :(得分:2)

一个行代码来检测浏览器。

如果浏览器是IE或Edge,它将返回true;

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

答案 10 :(得分:0)

这是一个检测IE10,IE11和Edge的javascript类 注入Navigator对象用于测试目的。

<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
        <title>Dynamically ADD / REMOVE Field through Javascript</title>
        <link rel="stylesheet" href="css/bootstrap.css" />
        <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>

        <style>
            .head {
                background-color: #0066cc;
                text-align: center;
                padding: 10 0;
                color: #ffffff;
            }

            .tab_class {
                text-align: center;
                width: 100%;
            }

            th, tr, td {
                padding-top: 5px;
                padding-bottom: 5px;
            }
        </style>

        <script type=text/javascript>

            var i = 1;

            function addelement() {
                var table = document.getElementById("tableID");

                var tbody = document.getElementById("tbody");

                var tr = document.createElement('tr');
                tr.id = 'row' + i;

                var td1 = document.createElement('td');
                var emp_id = document.createElement('input');
                emp_id.type = 'text';
                emp_id.id = 'emp_id' + i;
                emp_id.name = 'emp_id' + i;

                td1.appendChild(emp_id);
                tr.appendChild(td1);

                var td2 = document.createElement('td');
                var emp_name = document.createElement('input');
                emp_name.type = 'text';
                emp_name.id = 'emp_name' + i;
                emp_name.name = 'emp_name' + i;

                td2.appendChild(emp_name);
                tr.appendChild(td2);

                var td3 = document.createElement('td');
                var emp_mail = document.createElement('input');
                emp_mail.type = 'text';
                emp_mail.id = 'emp_mail' + i;
                emp_mail.name = 'emp_mail' + i;

                td3.appendChild(emp_mail);
                tr.appendChild(td3);

                var td4 = document.createElement('td');
                var btn = document.createElement('input');
                btn.type = 'button';
                btn.value = 'Delete';
                btn.id = 'btn_remove' + i;
                btn.name = 'btn_remove' + i;
                btn.setAttribute('class', 'btn btn-danger');
                btn.setAttribute('onclick', 'deletRow(' + i + ')');

                td4.appendChild(btn);
                tr.appendChild(td4);

                tbody.appendChild(tr);
                table.appendChild(tbody);
                i++;


                var button_id = document.getElementById('btn_remove' + i);
                console.log('button_id');
                if (document.querySelectorAll("#tableID tr").length > 2) {
                    for (var i = 0; i < document.querySelectorAll("#tableID tr input").length - 4; i++)
                        document.querySelectorAll("#tableID tr input")[i].disabled = true;
                }
            }

            function deletRow(i) {
                document.getElementById('row' + i).remove();
            }

        </script>

    </head>
    <body>
        <div class="container">
            <h4 class="head">INSERT EMPLOYEE DETAIL PORTAL</h4>
            <table class="table table-bordered" id="tableID">
                <thead>
                    <tr>
                        <th>Employee Id</th>
                        <th>Employee Name</th>
                        <th>email Id</td>
                        <th><button name="add" id="add" class="btn btn-success" onclick="addelement(1)">Add</button></th>
                    </tr>
                </thead>
                <tbody id="tbody"></tbody>
            </table>
            <input type="button" name="submit" id="submit" class="btn btn-success" value="submit" />
        </div>
        <script type="text/javascript" src="js/bootstrap.js"></script>
    </body>
    </html>

答案 11 :(得分:0)

如果我们需要检查Edge,请继续处理

if(navigator.userAgent.indexOf(“ Edge”)> 1){

//do something

}

答案 12 :(得分:-4)

首先,它肯定不是Notepad ++的问题。 它是你的&#34; 字符串匹配问题&#34;

所有IE版本中的常用字符串是 MSIE 查看http://www.useragentstring.com/pages/Internet%20Explorer/

处的各种userAgent字符串
if(navigator.userAgent.indexOf("MSIE") != -1){
   alert('I am Internet Explorer!!');
}