-
-
Save scottjehl/358029 to your computer and use it in GitHub Desktop.
//detect Internet Explorer and version number through injected conditional comments (no UA detect, no need for cond. compilation / jscript check) | |
//version arg is for IE version (optional) | |
//comparison arg supports 'lte', 'gte', etc (optional) | |
var isIE = (function(undefined){ | |
var doc = document, | |
doc_elem = doc.documentElement, | |
cache = {}, | |
elem; | |
return function( version, comparison ) { | |
if(/*@cc_on!@*/true){return false;} | |
var key = [ comparison || '', 'IE', version || '' ].join(' '); | |
if ( cache[ key ] === undefined ) { | |
elem = elem || doc.createElement( 'B' ); | |
elem.innerHTML = '<!--[if '+ key +']><b></b><![endif]-->'; | |
cache[ key ] = !!elem.getElementsByTagName( 'b' ).length; | |
} | |
return cache[ key ]; | |
}; | |
})(); | |
//minified: | |
var isIE=(function(){var doc=document,doc_elem=doc.documentElement,cache={},elem;return function(version,comparison){if(/*@cc_on!@*/true){return false;}var key=[comparison||"","IE",version||""].join(" ");if(cache[key]===undefined){elem=elem||doc.createElement("B");elem.innerHTML="<!--[if "+key+"]><b></b><![endif]-->";cache[key]=!!elem.getElementsByTagName("b").length;}return cache[key];};})(); | |
//is it IE? | |
isIE(); | |
//is it IE6? | |
isIE(6); | |
//is it less than or equal to IE 7? | |
isIE(7,'lte'); |
great point and nice catch :)
added.
thanks!
Yeah, my bad. I do this in all my plugins, but forgot to do it here!
You are missing the 'undefined' argument in the minified version. -- just say'n.
A similar trick over here: http://gist.github.com/527683
A cleaner way than that unused function argument, IMHO:
-- var isIE = (function(){
++ var isIE = (function(){var undefined;
Declaring a new variable named undefined
overrides whatever it might be defined in the enclosing scope; and obviously, leaving it undefined makes it, well, function as undefined
is intended to. (Personally, because I like allowing people to do evil hacks with undefined
if they want, I use var u;
in a new scope, instead, in most of my code.)
An IE-check ?
Have you considered ?:
var IE='\v'=='v';
http://ajaxian.com/archives/ievv
http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
Note that
cache[ key ] === undefined
could blow up since it is currently legal to doundefined = true
; therefore, modifying the anonymous function declaration to accept a single argument calledundefined
and then not passing it in will ensure that it is actually undefined. I believe this was first popularized by jQuery 1.4.