-
Star
(419)
You must be signed in to star a gist -
Fork
(506)
You must be signed in to fork a gist
-
-
Save padolsey/527683 to your computer and use it in GitHub Desktop.
| // ---------------------------------------------------------- | |
| // A short snippet for detecting versions of IE in JavaScript | |
| // without resorting to user-agent sniffing | |
| // ---------------------------------------------------------- | |
| // If you're not in IE (or IE version is less than 5) then: | |
| // ie === undefined | |
| // If you're in IE (>=5) then you can determine which version: | |
| // ie === 7; // IE7 | |
| // Thus, to detect IE: | |
| // if (ie) {} | |
| // And to detect the version: | |
| // ie === 6 // IE6 | |
| // ie > 7 // IE8, IE9 ... | |
| // ie < 9 // Anything less than IE9 | |
| // ---------------------------------------------------------- | |
| // UPDATE: Now using Live NodeList idea from @jdalton | |
| var ie = (function(){ | |
| var undef, | |
| v = 3, | |
| div = document.createElement('div'), | |
| all = div.getElementsByTagName('i'); | |
| while ( | |
| div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->', | |
| all[0] | |
| ); | |
| return v > 4 ? v : undef; | |
| }()); |
Also, just tried it in ie10 and ie gets declared as undefined.
@ttfkam Best Solution for IE10+
For any future spelunkers, the @davidhellsing version just above works fine on IE8 through IE11
If I'm testing IE11, but it's forced into ie8 via 'IE=EmulateIE8', this solution from @davidhellsing still show the IE version as 8, not as 11. Any thoughts? I want to determine if it's really IE10/11.
You can use bowser.
This is slick!
Unfortunately IE>=10 don't have conditional comments
The best option for IE / Edge these days is probably Layout Engine or something similar that uses JavaScript to detect browser features.
User agents can be forged or altered so I wouldn't rely on UA sniffing.
Maybe help:
var ie = 'NotIE'; //IE5-11
if( !!document.compatMode ) {
if( !!(Math && Math.acosh) ) ie = 'EDGE 12';
if( !!document.uniqueID){
if(!!window.ActiveXObject){ ie = 11; }
else if(!!document.all){
if(!!window.atob){ie = 10;}
else if(!!document.addEventListener) {ie = 9;}
else if(!!document.querySelector){ie = 8;}
else if(!!window.XMLHttpRequest){ie = 7;}
else if(!!document.compatMode){ie = 6;}
else ie = 5;
}
}
}
So I tried the code above, also davidhellsing's version, and I tested this on ie8, and it always says it's version 7, when it's 8. So I don't think this works on ie8.