Получить версию IE от User-Agent
var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}
Как это работает: Строка user-agent для всех версий IE включает в себя часть « Пространственная версия MSIE » или «Trident other-text rv space-or-colon version ». Зная это, мы берем номер версии из 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 ) );