59
votes

What's the least error-prone way to target just IE11 with JavaScript?

Note: This should really only be done for analytics or informing the user what browser they're using. For everything else, there's feature detection.

7
Searching for "IE11 user-agent" will give you blog posts and this article everybody saw : nczonline.net/blog/2013/07/02/… - Denys Séguret
@dystroy that blog post doesn't seem to have any detection code. Even hough it does have IE11's (current) UA, many people won't know how to test for it. - dave1010
For reference, here's the same question about IE10: stackoverflow.com/questions/9900311/… - dave1010
IE11 has several user-agent strings: blogs.msdn.com/b/ieinternals/archive/2013/09/21/… - EricLaw
Reopened - for some reason all votes to reopen this question in the past ended up aging away, and there were lots of these reopen votes. Needless to say, the people who left these scathing comments were part of the problem, choosing to complain rather than actually doing anything to try and get the question reopened. In future, if your question isn't getting reopened despite your best efforts to bring community attention to it, and you feel strongly about getting it reopened, feel free to flag it for moderator attention, explain your case, and we'll have a look. - BoltClock♦

7 Answers

90
votes

The User-agent string for IE 11 is currently this one :

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

Windows 10 example:

Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko

Which means your can simply test, for versions 11.xx,

var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent);

As IE10 user agent was

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

it's probably also safe to bet on the fact that now Trident/X is supposed to be the real versionning.

28
votes

IE11 keeps "Trident" in it's UA string, but drops MSIE. A simple way to detect the browser is IE11 or above (IE12, IE13, etc) is:

var isAtLeastIE11 = !!(navigator.userAgent.match(/Trident/) && !navigator.userAgent.match(/MSIE/));

If you want just IE11 (and you don't want future versions of IE to match), do this:

var isIE11 = !!(navigator.userAgent.match(/Trident/) && navigator.userAgent.match(/rv[ :]11/));
4
votes
3
votes

This will set ie to the version of IE, or 0 if none. It'll work for 1 through 11, but may not detect future versions if Microsoft drops the Trident engine.

var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}

You may also be interested in my related, more detailed answer here.

3
votes

I use the following pattern to target all IE browsers. You can short it down if you only need IE 11.

 /msie|trident|edge/g.test(navigator.userAgent.toLowerCase());

Good luck!

Fredrik

3
votes

Here's a script you can use to detect any browser:

<script>

  // Opera
  var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;

  // Firefox 1.0+
  var isFirefox = typeof InstallTrigger !== 'undefined';

  // Safari 3.0+ "[object HTMLElementConstructor]" 
  var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);

  // Internet Explorer 6-11
  var isIE = /*@cc_on!@*/false || !!document.documentMode;

  // Edge 20+
  var isEdge = !isIE && !!window.StyleMedia;

  // Chrome 1+
  var isChrome = !!window.chrome && !!window.chrome.webstore;

  // Blink engine detection
  var isBlink = (isChrome || isOpera) && !!window.CSS;

  if (isFirefox==true) {
    alert(isFirefox)
    $('.container-fluid').css({"overflow-y":"auto","height":"150%"});  
  }

</script>
2
votes

Try this,

navigator.sayswho= (function(){
   var N= navigator.appName, ua= navigator.userAgent, tem;
   var M= ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
   if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
   M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
   return M;
})();

Source from Browser detection in JavaScript?

Updated for IE=11

Use this

var isIE11 = navigator.userAgent.match(/Trident\/7.0; rv 11.0/);

Read this http://msdn.microsoft.com/en-us/library/ie/bg182625%28v=vs.85%29.aspx