Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript: The best way to detect IE

Reading this article I've found a following piece of code:

if ('v'=='\v') { // Note: IE listens on document
    document.attachEvent('onstorage', onStorage, false);
}

Is this method 'v'=='\v' a great idea? Is this the shortest way to detect IE ever?

like image 450
Dan Avatar asked Oct 07 '11 17:10

Dan


People also ask

Can I detect the browser with JavaScript?

To detect user browser information we use the navigator. userAgent property. And then we match with the browser name to identify the user browser. Now call this JS function on page load, and this will display the user browser name on page load.

How do you check if browser is IE or not?

documentMode property, which is IE-specific. That means documentMode returns the undefined value on all other browsers. For the Internet Explorer browser, it returns the IE mode used to render the document. That's all about checking for IE browser with JavaScript.

Can JavaScript be used to detect browser type and version?

To detect the browser version and browser name, we can use the userAgent in JavaScript.


3 Answers

If you can avoid it, don't test for browsers. Do feature detection. This will mean that your code is (more likely to be) future-proof. In this case, for instance, if you discovered that the browser was IE and decided to use attachEvent because of it, you would miss out on the fact that addEventListener (superior) is available in IE9.

In this case, test to see if document.addEventListener exists. If it does, you have the answer.

if (document.addEventListener) {
    document.addEventListener(...);
} else {
    document.attachEvent(...);
}

Edit: duri's comment above shows that this test fails in IE9 (as per standards), which actually means it is a perfect test for addEventListener, since that is available from IE9. However it is still far, far better to program for specific functionality, rather than specific browsers.

like image 84
lonesomeday Avatar answered Oct 08 '22 13:10

lonesomeday


You can check for Trident, IE's engine, by the following:

var trident = !!window.ActiveXObject;

As stated on MSDN it is only supported in IE.

Edit:

Note: above code returns false in IE-11, If you want to detect also IE-11 use this:

var isIE = "ActiveXObject" in window; //window.ActiveXObject !== undefined;
like image 21
Marshall Avatar answered Oct 08 '22 11:10

Marshall


To check if the browser is Internet Explorer, use feature detection to check for documentMode:

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

This code checks to see if the browser is Internet Explorer 8, 9, 10, or 11:

var docMode = document.documentMode,
    hasDocumentMode = (docMode !== undefined), 
    isIE8 = (docMode === 8),
    isIE9 = (docMode === 9),
    isIE10 = (docMode === 10),
    isIE11 = (docMode === 11),
    isMsEdge = window.navigator.userAgent.indexOf("Edge/") > -1;

// browser is IE
if(hasDocumentMode) {
     if(isIE11){
         // browser is IE11
     } else if(isIE10){
         // browser is IE10
     } else if(isIE9){
         // browser is IE9
     } else if(isIE8){
         // browser is IE8
     }
} else {
   // document.documentMode is deprecated in MS Edge
   if(isMsEdge){
         // browser is MS Edge
   }
}

Checking document.documentMode will only work in IE8 through IE11, since documentMode was added in IE8 and has been deprecated / removed in MS Edge.

http://msdn.microsoft.com/en-us/library/ff406036%28v=vs.85%29.aspx

I hope this helps!

UPDATE

If you really need to detect IE7, check for document.attachEvent:

var isIE7 = (document.attachEvent !== undefined);
if(isIE7) {
      // browser is IE7
}

IE7 returns a object, but if the browser is IE11 (for example), then this would come back as undefined, since IE11 does not have attachEvent.

UPDATE:

Added check for MS Edge. document.documentMode was deprecated in MS Edge. Due to the nature of MS Edge, you can check for Edge/ in the User Agent. Microsoft is making it difficult to use feature detection in MS Edge.

like image 37
Jonathan Marzullo Avatar answered Oct 08 '22 12:10

Jonathan Marzullo