When I want to detect IE I use this code:
function getInternetExplorerVersion()
{
var rv = -1;
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
function checkVersion()
{
var msg = "You're not using Internet Explorer.";
var ver = getInternetExplorerVersion();
if ( ver > -1 )
{
msg = "You are using IE " + ver;
}
alert( msg );
}
But IE11 is returning "You're not using Internet Explorer". How can I detect it?
This question is related to
internet-explorer
debugging
internet-explorer-11
browser-detection
forward-compatibility
Only for IE Browser:
var ie = 'NotIE'; //IE5-11, Edge+
if( !!document.compatMode ) {
if( !("ActiveXObject" in window) ) ) ie = 'EDGE';
if( !!document.uniqueID){
if('ActiveXObject' in window && !window.createPopup ){ 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;
}
}
}
use alert(ie);
Testing:
var browserVersionExplorer = (function() {_x000D_
var ie = '<s>NotIE</s>',_x000D_
me = '<s>NotIE</s>';_x000D_
_x000D_
if (/msie\s|trident\/|edge\//i.test(window.navigator.userAgent) && !!(document.documentMode || document.uniqueID || window.ActiveXObject || window.MSInputMethodContext)) {_x000D_
if (!!window.MSInputMethodContext) {_x000D_
ie = !("ActiveXObject" in window) ? 'EDGE' : 11;_x000D_
} else if (!!document.uniqueID) {_x000D_
if (!!(window.ActiveXObject && document.all)) {_x000D_
if (document.compatMode == "CSS1Compat" && !!window.DOMParser ) {_x000D_
ie = !!window.XMLHttpRequest ? 7 : 6;_x000D_
} else {_x000D_
ie = !!(window.createPopup && document.getElementById) ? parseFloat('5.5') : 5;_x000D_
}_x000D_
if (!!document.documentMode && !!document.querySelector ) {_x000D_
ie = !!(window.atob && window.matchMedia) ? 10 : ( !!document.addEventListener ? 9 : 8);_x000D_
}_x000D_
} else ie = !!document.all ? 4 : (!!window.navigator ? 3 : 2);_x000D_
}_x000D_
}_x000D_
_x000D_
return ie > 1 ? 'IE ' + ie : ie;_x000D_
})();_x000D_
_x000D_
alert(browserVersionExplorer);
_x000D_
Now we could use something easier and simpler:
var uA = window.navigator.userAgent,
onlyIEorEdge = /msie\s|trident\/|edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
checkVersion = (onlyIEorEdge && +(/(edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;
Use !(window.ActiveXObject) && "ActiveXObject" in window
to detect IE11 explicitly.
To detect any IE (pre-Edge, "Trident") version, use "ActiveXObject" in window
instead.
Quite frankly I would say use a library that does what you need (like platform.js for example). At some point things will change and the library will be equipped for those changes and manual parsing using regular expressions will fail.
Thank god IE goes away...
Use MSInputMethodContext
as part of a feature detection check. For example:
//Appends true for IE11, false otherwise
window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;
References
var ua = navigator.userAgent.toString().toLowerCase();
var match = /(trident)(?:.*rv:([\w.]+))?/.exec(ua) ||/(msie) ([\w.]+)/.exec(ua)||['',null,-1];
var rv = match[2];
return rv;
Detect most browsers with this:
var getBrowser = function(){
var navigatorObj = navigator.appName,
userAgentObj = navigator.userAgent,
matchVersion;
var match = userAgentObj.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
if( match && (matchVersion = userAgentObj.match(/version\/([\.\d]+)/i)) !== null) match[2] = matchVersion[1];
//mobile
if (navigator.userAgent.match(/iPhone|Android|webOS|iPad/i)) {
return match ? [match[1], match[2], mobile] : [navigatorObj, navigator.appVersion, mobile];
}
// web browser
return match ? [match[1], match[2]] : [navigatorObj, navigator.appVersion, '-?'];
};
Angular JS does this way.
msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
if (isNaN(msie)) {
msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
}
msie will be positive number if its IE and NaN for other browser like chrome,firefox.
why ?
As of Internet Explorer 11, the user-agent string has changed significantly.
refer this :
solution :
function GetIEVersion() {_x000D_
var sAgent = window.navigator.userAgent;_x000D_
var Idx = sAgent.indexOf("MSIE");_x000D_
// If IE, return version number._x000D_
if (Idx > 0)_x000D_
return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));_x000D_
_x000D_
// If IE 11 then look for Updated user agent string._x000D_
else if (!!navigator.userAgent.match(/Trident\/7\./))_x000D_
return 11;_x000D_
_x000D_
else_x000D_
return 0; //It is not IE_x000D_
_x000D_
}_x000D_
if ((GetIEVersion() > 0) || (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)){_x000D_
alert("This is IE " + GetIEVersion());_x000D_
}else {_x000D_
alert("This no is IE ");_x000D_
}
_x000D_
I used the onscroll
event at the element with the scrollbar. When triggered in IE, I added the following validation:
onscroll="if (document.activeElement==this) ignoreHideOptions()"
var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}
How it works: The user-agent string for all IE versions includes a portion "MSIE space version" or "Trident other-text rv space-or-colon version". Knowing this, we grab the version number from a String.match()
regular expression. A try-catch
block is used to shorten the code, otherwise we'd need to test the array bounds for non-IE browsers.
Note: The user-agent can be spoofed or omitted, sometimes unintentionally if the user has set their browser to a "compatibility mode". Though this doesn't seem like much of an issue in practice.
var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 :
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 :
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );
How it works: Each version of IE adds support for additional features not found in previous versions. So we can test for the features in a top-down manner. A ternary sequence is used here for brevity, though if-then
and switch
statements would work just as well. The variable ie
is set to an integer 5-11, or 1 for older, or 99 for newer/non-IE. You can set it to 0 if you just want to test for IE 1-11 exactly.
Note: Object detection may break if your code is run on a page with third-party scripts that add polyfills for things like document.addEventListener
. In such situations the user-agent is the best option.
If you're only interested in whether or not a browser supports most HTML 5 and CSS 3 standards, you can reasonably assume that IE 8 and lower remain the primary problem apps. Testing for window.getComputedStyle
will give you a fairly good mix of modern browsers, as well (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9 greatly improves on standards support, but native CSS animation requires IE 10.
var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) );
This appears to be a better method. "indexOf" returns -1 if nothing is matched. It doesn't overwrite existing classes on the body, just adds them.
// add a class on the body ie IE 10/11
var uA = navigator.userAgent;
if(uA.indexOf('Trident') != -1 && uA.indexOf('rv:11') != -1){
document.body.className = document.body.className+' ie11';
}
if(uA.indexOf('Trident') != -1 && uA.indexOf('MSIE 10.0') != -1){
document.body.className = document.body.className+' ie10';
}
I'm using a simpler method:
The navigator global object has a property touchpoints, in Internet Exlorer 11 is called msMaxTouchPoints tho.
So if you look for:
navigator.msMaxTouchPoints !== void 0
You will find Internet Explorer 11.
Try This:
var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var net = !!navigator.userAgent.match(/.NET4.0E/);
var IE11 = trident && net
var IEold = ( navigator.userAgent.match(/MSIE/i) ? true : false );
if(IE11 || IEold){
alert("IE")
}else{
alert("Other")
}
I've read your answers and made a mix. It seems to work with Windows XP(IE7/IE8) and Windows 7 (IE9/IE10/IE11).
function ie_ver(){
var iev=0;
var ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var rv=navigator.userAgent.indexOf("rv:11.0");
if (ieold) iev=new Number(RegExp.$1);
if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
if (trident&&rv!=-1) iev=11;
return iev;
}
Of course if I return 0, means no IE.
Source: Stackoverflow.com