Всем было очень удобно пользоваться встроенной в jQuery системой проверки движка и версии браузера (через $.browser) до того, как jQuery исключила этот функционал из сборки. Так как же быть теперь? Как определить IE Javascript?

определить IE Javascript

Есть несколько методов определить IE javascript, некоторые с использованием не только javascript.

Метод 1: определить IE Javascript

В основе этого метода лежат условные комментарии, которые отрабатывают только на браузерах IE (правда только на старых IE – 10, 11 и далее их не поддерживают).

Как это работает?




  

Условные комментарии выполняться только для IE, и выведут соответствующую версию в класс HTML.

Далее просто на jQuery определяем какой же класс прописан у HTML:

if($('html').hasClass('lt-ie7')) {/*Значит IE 7*/}
if($('html').hasClass('lt-ie8')) {/*Значит IE 7*/}
if($('html').hasClass('lt-ie9')) {/*Значит IE 7*/}
if($('html').hasClass('lt-ie9')) {/*Значит IE 7*/}
if($('html').hasClass('no-js')) {/*Значит просто IE*/}

Но, как видите, решение не очень универсальное, так как срабатывает только для версий IE ниже 10. 10 и выше уже не определятся.

Метод 2: определить IE Javascript

Второй метод заключается в том, чтобы определить какие функции доступны в браузере, и сравнить их с теми, которые должны быть в соответствующей версии браузера. Этот метод работает на чистом Javascript.

if (!('querySelector' in document)  //скорее всего ie 9+
         || !('localStorage' in window)  //ie 8+
         || !('addEventListener' in window)  //ie 8 + (возможно)
        || !('matchMedia' in window)) {//ie 10+

        //действия которые должны сработать для IE.
    }

Метод не идеален, потому, что некоторые функции не обязательно будут в той или иной версии браузера (это может зависеть от сборки браузера, сборки ОС и многих других факторов).

Метод 3: определить IE Javascript

Метод определяет версию браузера через значение User-agent (которое есть у каждого браузера).

Работает в виде функции:

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 );
                                }
                                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.$1 );
                                }
                                return rv;
                            }

При помощи регулярных выражений в функции находится версия браузера исходя из Useragent. Дотошные могут заметить, что в функции встречается название браузера Netscape. Да, именно такой UserAgent подставляется в браузерах Trident.

Итак, по умолчанию стоит rv=-1, и в результате проверок это значение меняется (или не меняется если браузер не IE).

Для того, чтобы определить IE javascript или не IE, достаточно вызвать функцию в условии:


if(getInternetExplorerVersion()!==-1){
  //Значит это IE
}

Аналогично с помощью этой функции можно точно узнать номер версии браузера.