Подтвердить что ты не робот

Как определить, какая версия IE работает в JavaScript?

В каком-то существующем коде есть тест, чтобы проверить, работает ли пользователь IE, проверяя, является ли объект Browser.Engine.trident определенным и возвращает true.

Но как я могу определить, работает ли пользователь под IE6 (или ранее) или IE7 (или позже)?

Тест необходим внутри функции JavaScript, поэтому условный комментарий не подходит.

4b9b3361

Ответ 1

От более эффективно обнаружение Internet Explorer в msdn:

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  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 )
  {
    if ( ver >= 6.0 ) 
      msg = "You're using a recent copy of Internet Explorer."
    else
      msg = "You should upgrade your copy of Internet Explorer.";
  }
  alert( msg );
}

Ответ 2

Если вы действительно хотите убедиться, что используете IE и определенную версию, вы, очевидно, можете использовать IE-условные теги только для запуска определенного кода в IE. Это не совсем так, но, по крайней мере, вы можете быть уверены, что это действительно IE, а не какая-то подделанная версия.

<script>
    var isIE = false;
    var version = -1;
</script>
<!--[if IE 6]>
    <script>
        isIE = true;
        version = 6
    </script>
<![endif]-->
<!--[if IE 7]>
    <script>
        isIE = true;
        version = 7
    </script>
<![endif]-->

Это довольно объяснительно. В IE6 isIE есть true и version is 6, В IE7 isIE есть true и version is 7 иначе isIE является ложным, а version - -1

В качестве альтернативы вы можете просто свернуть свое собственное решение, используя код, плагированный из jQuery.

var userAgent = navigator.userAgent.toLowerCase();
var version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
var isIE = /msie/.test( userAgent ) && !/opera/.test( userAgent ),    

Ответ 3

Если вы уже используете jQuery в версии до 1.9 и вам не нужно обнаруживать IE 11, вы можете сделать это:

if (jQuery.browser.msie == true) { 
if (jQuery.browser.version == 7.0)
  // .. do something for 7.0
else 
  // .. do something for < 7.0
}

Ответ 4

Объект Navigator содержит всю информацию о браузере пользователя:

например:

var browser = navigator.appName;

var b_version = navigator.appVersion;

var version = parseFloat (b_version);

См:

http://www.w3schools.com/js/js_browser.asp

Ответ 5

Если вы проверяете определенную функциональность, вы должны проверить ее непосредственно, например. if (window.focus) {window.focus();} Обнаружение браузера никогда не является надежным.

Подробнее об обнаружении объекта и браузера ознакомьтесь с этой статьей на Quirksmode.

С другой стороны, если вам нужна функция, это тип и версия браузера, например. для статистических целей - с navigator.appName и navigator.appVersion. (Остерегайтесь, хотя - многие менее популярные браузеры маскируют себя как MSIE 6 или 7, поскольку некоторые сайты блокируют что-либо, что не IE, исходя из предпосылки, что "все современные браузеры IE, верно?" (Подсказка: больше нет).

Ответ 6

Таким образом, режим просмотра совместимости IE8 сообщает себя как IE7, хотя он не всегда ведет себя одинаково. И для этого я даю вам этого монстра:

    // IE8 "Compatibility mode" is anything but.  Oh well, at least it doesn't take 40 lines of code to detect and work around it.
// Oh wait:
/*
 * Author: Rob Reid
 * CreateDate: 20-Mar-09
 * Description: Little helper function to return details about IE 8 and its various compatibility settings either use as it is
 * or incorporate into a browser object. Remember browser sniffing is not the best way to detect user-settings as spoofing is
 * very common so use with caution.
*/
function IEVersion(){
    var _n=navigator,_w=window,_d=document;
    var version="NA";
    var na=_n.userAgent;
    var ieDocMode="NA";
    var ie8BrowserMode="NA";
    // Look for msie and make sure its not opera in disguise
    if(/msie/i.test(na) && (!_w.opera)){
        // also check for spoofers by checking known IE objects
        if(_w.attachEvent && _w.ActiveXObject){        
            // Get version displayed in UA although if its IE 8 running in 7 or compat mode it will appear as 7
            version = (na.match( /.+ie\s([\d.]+)/i ) || [])[1];
            // Its IE 8 pretending to be IE 7 or in compat mode        
            if(parseInt(version)==7){                
                // documentMode is only supported in IE 8 so we know if its here its really IE 8
                if(_d.documentMode){
                    version = 8; //reset? change if you need to
                    // IE in Compat mode will mention Trident in the useragent
                    if(/trident\/\d/i.test(na)){
                        ie8BrowserMode = "Compat Mode";
                    // if it doesn't then its running in IE 7 mode
                    }else{
                        ie8BrowserMode = "IE 7 Mode";
                    }
                }
            }else if(parseInt(version)==8){
                // IE 8 will always have documentMode available
                if(_d.documentMode){ ie8BrowserMode = "IE 8 Mode";}
            }
            // If we are in IE 8 (any mode) or previous versions of IE we check for the documentMode or compatMode for pre 8 versions            
            ieDocMode = (_d.documentMode) ? _d.documentMode : (_d.compatMode && _d.compatMode=="CSS1Compat") ? 7 : 5;//default to quirks mode IE5                               
        }
    }

    return {
        "UserAgent" : na,
        "Version" : version,
        "BrowserMode" : ie8BrowserMode,
        "DocMode": ieDocMode
    }            
}
var ieVersion = IEVersion();
var IsIE8 = ieVersion.Version != "NA" && ieVersion.Version >= 8;

Ответ 7

Вероятно, это будет отклонено, потому что оно напрямую не отвечает на вопрос, но... Вы должны не писать код, специфичный для браузера. Очень мало вы не можете сделать, когда кодируете наиболее широко используемые браузеры.

EDIT: Единственный раз, когда мне было удобно иметь условные комментарии, когда мне нужно было включить ie6.css или ie7.css.

Ответ 8

Ну... вот что я придумал, подумав немного. просто хотел найти простое решение.

if (navigator.appName == 'Microsoft Internet Explorer') {
        // Take navigator appversion to an array & split it 
        var appVersion = navigator.appVersion.split(';');
        // Get the part that you want from the above array  
        var verNumber = appVersion[1];

        alert(verNumber);
}

Он возвращает ex: - MSIE 10.0, MSIE 9.0, MSIE 8.0

далее расширяются, если вы хотите проверить, является ли версия "ниже чем" или "больше, чем" IE, вы можете слегка изменить

if (navigator.appName == 'Microsoft Internet Explorer') {
        var appVersion = navigator.appVersion.split(';');
        var verNumber = appVersion[1];
        // Reaplce "MSIE " from the srting and parse it to integer value        
        var IEversion = parseInt(verNumber.replace('MSIE ', ''));

        if(IEversion <= 9){
            alert(verNumber);
        }
}

получил базовую идею от w3schools, надеюсь, что это поможет кому-то...: D

Ответ 9

Это script я использую и, кажется, работает достаточно хорошо:

// Returns 0 if the browser is anything but IE
function getIEVersion() {
   var ua = window.navigator.userAgent;
   var ie = ua.indexOf("MSIE ");
   return ((ie > 0) ? parseInt(ua.substring(ie+5, ua.indexOf(".", ie))) : 0);
}

Надеюсь, что кто-то поможет...

Ответ 10

Это даст вам более подробную информацию, чем вы хотите:

var agent = navigator.userAgent;
var msiePattern = /.*MSIE ((\d+).\d+).*/
if( msiePattern.test( agent ) ) {
  var majorVersion = agent.replace(msiePattern,"$2");
  var fullVersion = agent.replace(msiePattern,"$1");
  var majorVersionInt = parseInt( majorVersion );
  var fullVersionFloat = parseFloat( fullVersion );
}

Ответ 11

Как никто, кажется, еще не сказал:

Тест необходим внутри функции JavaScript, поэтому условный комментарий не подходит.

Вы можете легко поставить условный комментарий - условный комментарий JScript, а не HTML-код внутри функции:

function something() {
    var IE_WIN= false;
    var IE_WIN_7PLUS= false;
    /*@cc_on
    @if (@_win32)
        IE_WIN= true;
        @if (@_jscript_version>=5.7)
            IE_WIN_7PLUS = true;
        @end
    @end @*/
    ...
}

Более типично проводить тест один раз на глобальном уровне, но и просто проверять сохраненные флаги.

CCs более надежны, чем просеивание через беспорядок, который в наши дни стал частью User-Agent. Способы сопоставления строк в navigator.userAgent могут ошибочно идентифицировать спуфинговые браузеры, такие как Opera.

Разумеется, возможность обнюхивания намного лучше для кросс-браузерного кода, где это возможно, но в некоторых случаях - обычно обходные пути исправления ошибок - вам действительно нужно идентифицировать IE, а CC, вероятно, лучший способ сделать это сегодня.

Ответ 12

<script>
    alert("It is " + isIE());

    //return ie number as int else return false
    function isIE() {
        var myNav = navigator.userAgent.toLowerCase();
        if (myNav.indexOf('msie') != -1) //ie less than ie11 (6-10)
        {
            return parseInt(myNav.split('msie')[1]);
        }
        else 
        {
            //Is the version more than ie11? Then return false else return ie int number
            return (!!(myNav.match(/trident/) && !myNav.match(/msie/)) == false)?false : parseInt(myNav.split('rv:')[1].substring(0, 2));               
        }
    }
</script>