Каков наилучший способ обнаружения Internet Explorer 6 с помощью JavaScript?

Каков наилучший способ обнаружения Internet Explorer 6 с помощью JavaScript?

If browser == IE6 {
    alert('hi');
}

Ответ 1

Условные комментарии - хорошая альтернатива:

<!--[if IE 6]>
<script>
var everythingIsBroken = true;
</script>
<![endif]-->

Изменить. Если вы все еще ищете поддержку IE 6 в 2017 году или после... хорошо, мое сердце уходит к вам. Ответ на этот вопрос в 2017 году действительно не стоит беспокоиться о IE 6. Это не поддерживаемый браузер. Любая операционная система, которая может запускать этот браузер и сам браузер, больше не получает обновлений безопасности. Это означает, что пользователи, использующие это программное обеспечение, подвергаются большому риску использования. Это большая проблема для людей, которые не могут позволить себе модернизировать.

Ответ 2

рискуя ответить на вопрос, который был задан (и на мгновение, у которого есть вопрос, у которого есть хорошая причина специально определить IE6):

if (/\bMSIE 6/.test(navigator.userAgent) && !window.opera) {
  // yep, browser claims to be IE6
}

Ответ 3

  var ua = window.navigator.userAgent;
  var msie = ua.indexOf ( "MSIE " );

  if ( msie > 0 )      // If Internet Explorer, return version number
     return parseInt (ua.substring (msie+5, ua.indexOf (".", msie )));
  else                 // If another browser, return 0
     return 0;

Источник: http://support.microsoft.com/kb/167820

Ответ 4

Не основывайте свое обнаружение на пользовательском агенте. Существует множество других браузеров, в которых используется движок Trident 4 (один из IE6), которые не являются IE6.

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


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

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

Следующий script использует функции браузера для обнаружения движка. Кредит для производственной команды MooTools (http://mootools.net/developers/).

Примечание. Ниже приведен фрагмент ниже для работы без рамки MooTools javascript. Если вы хотите работать с MooTools, вам больше не нужен этот код, он является частью дистрибутива.

function $tryCatch(){
    for (var i = 0, l = arguments.length; i < l; i++){
        try {
            return arguments[i]();
        } catch(e){}
    }
    return null;
};

var Browser = {

    Engine: {name: 'unknown', version: 0},

    Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},

    Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},

    Plugins: {},

    Engines: {

        presto: function(){
            return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
        },

        trident: function(){
            return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((document.querySelectorAll) ? 6 : 5) : 4);
        },

        webkit: function(){
            return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
        },

        gecko: function(){
            return (!document.getBoxObjectFor && window.mozInnerScreenX == null) ? false : ((document.getElementsByClassName) ? 19 : 18);
        }

    }

};

Browser.Platform[Browser.Platform.name] = true;

Browser.detect = function(){

    for (var engine in this.Engines){
        var version = this.Engines[engine]();
        if (version){
            this.Engine = {name: engine, version: version};
            this.Engine[engine] = this.Engine[engine + version] = true;
            break;
        }
    }

    return {name: engine, version: version};

};

Browser.detect();

Browser.Request = function(){
    return $tryCatch(function(){
        return new XMLHttpRequest();
    }, function(){
        return new ActiveXObject('MSXML2.XMLHTTP');
    }, function(){
        return new ActiveXObject('Microsoft.XMLHTTP');
    });
};

Browser.Features.xhr = !!(Browser.Request());

Browser.Plugins.Flash = (function(){
    var version = ($tryCatch(function(){
        return navigator.plugins['Shockwave Flash'].description;
    }, function(){
        return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
    }) || '0 r0').match(/\d+/g);
    return {version: parseInt(version[0] || 0 + '.' + version[1], 10) || 0, build: parseInt(version[2], 10) || 0};
})();

function $exec(text){
    if (!text) return text;
    if (window.execScript){
        window.execScript(text);
    } else {
        var script = document.createElement('script');
        script.setAttribute('type', 'text/javascript');
        script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text;
        document.head.appendChild(script);
        document.head.removeChild(script);
    }
    return text;
};

Просто включите этот класс JavaScript, и вы можете обнаружить IE6 и любой другой браузер, используя движок Trident4, выполнив следующие действия:

if(Browser.Engine.trident4) {
   alert('IE6 or similar...');
} elseif(Browser.Engine.name == "trident") {
   alert('Internet Explorer Trident Rendering Engine Version ' + Browser.Engine.version);
}

Ответ 5

Самый надежный способ сделать это - использовать условные комментарии, как упоминается @apphacker. Однако то, что, как представляется, менее известно, заключается в том, что условные комментарии могут использоваться в JavaScript:

var div = document.createElement("div");
div.innerHTML = "<!--[if IE 6]><i></i><![endif]-->";
var isIe6 = (div.getElementsByTagName("i").length == 1);

alert("Is IE 6: " + isIe6);

Ответ 6

Очень позднее дополнение.

В дополнение к условным комментариям HTML, используемым в ответе apphacker, Microsoft JScript также предоставляет условные комментарии для JavaScript:

<script type="text/javascript">
    var isIE6 = /*@cc_on/*@if(@_jscript_version<=5.6)[email protected]@*/0/*@[email protected]*/;

    if (isIE6) {
        alert("You're screwed");
    }
</script>

Хорошо, что он также может использоваться во внешних файлах JavaScript (.js).

В таблице перечислены версии JScript, которые реализованы приложениями Microsoft: Информация о версии JavaScript

Ответ 7

Каков наилучший способ обнаружения <browser_x > используя JavaScript?

Не.

Как сказал Эндрю Мур в комментариях к этому сообщению, вы должны использовать функцию обнаружения. Это сделает ваш код более "надежным". Если другой браузер включает или больше не поддерживает функцию в будущем, тогда ваш код будет в безопасности. Есть несколько сайтов, объясняющих, как с этим справиться. Концепция огромна и охватывает множество концепций, поэтому вместо того, чтобы писать эссе/книгу об этом, вот некоторые ресурсы для использования:

Ответ 8

Я не уверен, есть ли особая причина, по которой вы хотите обнаружить IE 6, но в целом лучше попытаться обнаружить функции браузера, а не обнаруживать браузер. Вы можете сделать это легко с помощью JQuery, используя jQuery.support: http://api.jquery.com/jQuery.support/.

Ответ 9

<!--[if (IE 6)|(IE 7)]>
<script>
    alert("Lesser browser detected!");
</script>
<![endif]-->