Search code examples
javascripthtmlinternet-explorermedia-queriesmicrosoft-edge

How can I detect Internet Explorer (IE) and Microsoft Edge using JavaScript?


I've looked around a lot, and I understand that there's a lot of ways to detect internet explorer.

My problem is this: I have an area on my HTML document, that when clicked, calls a JavaScript function that is incompatible with internet explorer of any kind. I want to detect if IE is being used, and if so, set the variable to true.

The problem is, I am writing my code out of Notepad++, and when I run the HTML code in browser, none of the methods for detecting IE work. I think the problem is that I am running it out of Notepad++. I need to be able to detect IE, so that based on the variable, I can disable that area of the site. I have tried this:

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

but it doesn't work. How can I detect IE out of Notepad++? That's what I'm testing the HTML out of, but I need a method that'll work with that.

edit

I noticed someone has marked this as a duplicate, and that is understandable. I suppose I was not clear. I cannot use a JQuery answer, so this is not a duplicate as I am asking for a vanilla JS answer.

Edit #2

Is there also a way to detect the Microsoft Edge browser?


Solution

  • I don't know why, but I'm not seeing "Edge" in the userAgent like everyone else is talking about, so I had to take another route that may help some people.

    Instead of looking at the navigator.userAgent, I looked at navigator.appName to distinguish if it was IE<=10 or IE11 and Edge. IE11 and Edge use the appName of "Netscape", while every other iteration uses "Microsoft Internet Explorer".

    After we determine that the browser is either IE11 or Edge, I then looked to navigator.appVersion. I noticed that in IE11 the string was rather long with a lot of information inside of it. I arbitrarily picked out the word "Trident", which is definitely not in the navigator.appVersion for Edge. Testing for this word allowed me to distinguish the two.

    Below is a function that will return a numerical value of which Internet Explorer the user is on. If on Microsoft Edge it returns the number 12.

    Good luck and I hope this helps!

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