Как обнаружить IE11?
когда я хочу обнаружить IE я использую этот код:
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. );
}
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 );
}
но IE11 возвращает "вы не используете Internet Explorer". Как я могу его обнаружить?
15 ответов:
IE11 больше не сообщает как
MSIE
, по данным список изменений это намеренно, чтобы избежать неправильного обнаружения.что вы можете сделать, если вы действительно хотите знать, что это IE, чтобы обнаружить
Trident/
строка в Агенте пользователя, еслиnavigator.appName
возвращаетNetscape
, что-то вроде (непроверенных);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. ); } else if (navigator.appName == 'Netscape') { var ua = navigator.userAgent; var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) rv = parseFloat( RegExp. ); } return rv; } console.log('IE version:', getInternetExplorerVersion());
обратите внимание, что IE11 (afaik) все еще находится в предварительном просмотре, и агент пользователя может измениться до выпуска.
использовать
!(window.ActiveXObject) && "ActiveXObject" in window
для обнаружения IE11 явно.чтобы обнаружить любую версию IE (pre-Edge, "Trident"), используйте
"ActiveXObject" in window
вместо.
использовать
MSInputMethodContext
в рамках проверки обнаружения объектов. Например://Appends true for IE11, false otherwise window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;
ссылки
Я прочитал ваши ответы и сделал микс. Кажется, он работает с Windows XP (IE7/IE8) и 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.); if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10; if (trident&&rv!=-1) iev=11; return iev; }
конечно, если я возвращаю 0, значит, нет IE.
получить версию IE от User-Agent
var ie = 0; try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; } catch(e){}
как работает: строка user-agent для всех версий IE включает в себя часть " MSIE пробелверсия" или "Тризуб Другое-Текст rv пространство-или-двоеточиеверсия". Зная это, мы берем номер версии от
String.match()
регулярное выражение. Аtry-catch
блок используется для сокращения кода, в противном случае нам нужно будет проверить границы массива для браузеров, отличных от IE.Примечание: пользовательский агент может быть подделан или опущен, иногда непреднамеренно, если пользователь установил свой браузер в "режим совместимости". Хотя на практике это не кажется большой проблемой.
получить версию IE без User-Agent
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 );
как работает: каждая версия IE добавляет поддержку дополнительные возможности не найдено в предыдущем версии. Таким образом, мы можем проверить функции сверху вниз. А троичная последовательность используется здесь для краткости, хотя
if-then
иswitch
заявления будут работать так же хорошо. Переменнаяie
устанавливается в целое число 5-11, или 1 для старых, или 99 для новых/не-IE. Вы можете установить его в 0, если вы просто хотите проверить для IE 1-11 точно.Примечание: обнаружение объектов может нарушиться, если ваш код выполняется на странице со сторонними скриптами, которые добавляют полифиллы для такие вещи, как
document.addEventListener
. В таких ситуациях пользователь-агент является лучшим вариантом.
определить, если браузер современный
если вас интересует только то, поддерживает ли браузер большинство стандартов HTML 5 и CSS 3, Вы можете разумно предположить что IE 8 и ниже остаются основными проблемными приложениями. Тестирование для
window.getComputedStyle
даст вам довольно хорошее сочетание современных браузеров, а также (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9 значительно улучшает по стандартам поддержки, но родной CSS анимации требуется IE 10.var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) );
угловой JS делает это таким образом.
msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]); if (isNaN(msie)) { msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]); }
msie будет положительным числом, если его IE и NaN для другого браузера,такого как chrome, firefox.
почему ?
начиная с Internet Explorer 11, строка user-agent значительно изменилась.
передать этот :
устранение :
function GetIEVersion() { var sAgent = window.navigator.userAgent; var Idx = sAgent.indexOf("MSIE"); // If IE, return version number. if (Idx > 0) return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx))); // If IE 11 then look for Updated user agent string. else if (!!navigator.userAgent.match(/Trident\/7\./)) return 11; else return 0; //It is not IE } if ((GetIEVersion() > 0) || (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)){ alert("This is IE " + GetIEVersion()); }else { alert("This no is IE "); }
Я использую более простой способ:
глобальный объект Navigator имеет точки соприкосновения собственность, в интернет-исследователю 11 называется свойство msmaxtouchpoints Тхо.
Так что если вы ищете:
navigator.msMaxTouchPoints !== void 0
вы найдете Internet Explorer 11.
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;
Попробуйте Это:
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") }
Это, кажется, лучший способ. "indexOf" возвращает -1, если ничего не совпадает. Он не перезаписывает существующие классы в теле, а просто добавляет их.
// 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'; }
обнаружить большинство браузеров с этого:
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, '-?']; };
я использовал
onscroll
событие в элементе с полосой прокрутки. При запуске в IE я добавил следующую проверку:onscroll="if (document.activeElement==this) ignoreHideOptions()"
только для браузера IE:
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);
тестирование:
var browserVersionExplorer = (function() { var ie = '<s>NotIE</s>', me = '<s>NotIE</s>'; if (/msie\s|trident\/|edge\//i.test(window.navigator.userAgent) && !!(document.documentMode || document.uniqueID || window.ActiveXObject || window.MSInputMethodContext)) { if (!!window.MSInputMethodContext) { ie = !("ActiveXObject" in window) ? 'EDGE' : 11; } else if (!!document.uniqueID) { if (!!(window.ActiveXObject && document.all)) { if (document.compatMode == "CSS1Compat" && !!window.DOMParser ) { ie = !!window.XMLHttpRequest ? 7 : 6; } else { ie = !!(window.createPopup && document.getElementById) ? parseFloat('5.5') : 5; } if (!!document.documentMode && !!document.querySelector ) { ie = !!(window.atob && window.matchMedia) ? 10 : ( !!document.addEventListener ? 9 : 8); } } else ie = !!document.all ? 4 : (!!window.navigator ? 3 : 2); } } return ie > 1 ? 'IE ' + ie : ie; })(); alert(browserVersionExplorer);
Теперь мы могли бы использовать что-то проще и проще:
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;