Надежное обнаружение IE7 в режиме документа IE6 - PullRequest
0 голосов
/ 17 июня 2020

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

IE6 может иногда сообщать как IE7 после Windows Service Pack Update (SP3). Я могу надежно протестировать IE6, маскирующийся под IE7, используя условную компиляцию и функцию обнаружения XMLHttpRequest, но я почти уверен, что IE7 в режиме документа IE6 (или, честно говоря, в более ранних режимах) также даст отрицательный результат для XMLHttpRequest.

Есть ли способ надежно определить, является ли движок браузера IE IE6 или 7, независимо от режима документа?

Ответы [ 2 ]

0 голосов
/ 28 августа 2020

Режим документа - это функция, которая не поддерживается до IE8.

Поэтому все, что вам нужно сделать, это проверить функцию, которая поддерживается в IE7, но не в IE6.

0 голосов
/ 17 июня 2020

Согласно совместимости браузера XMLHttpRequest , мы видим, что XMLHttpRequest поддерживает IE 7+. Если мы хотим использовать его в IE 5, мы должны использовать его через ActiveXObject ('Microsoft.XMLHTTP'). Итак, мы могли бы использовать эту функцию для обнаружения браузера IE 7.

Для IE6, маскирующегося под IE7, я полагаю, что, возможно, вы используете строку userAgent для определения IE версии браузера. После тестирования UserAgent на моей стороне кажется, что в настоящее время, если мы изменим эмуляцию разработчика F12 на режим IE 5 и IE 7, строка UserAgent будет выглядеть следующим образом:

  • IE 7 Mode : «mozilla / 4.0 (совместимый; ms ie 7.0; windows nt 10.0; wow64; trident / 7.0; .net4.0c; .net4.0e;. net clr 2.0.50727;. net clr 3.0.30729;. net clr 3.5.30729) "

  • IE 5 Режим : "mozilla / 4.0 (совместимый; ms ie 7.0; windows nt 10.0; wow64; trident / 7.0; .net4.0c; .net4.0e;. net clr 2.0.50727;. net clr 3.0 .30729;. net clr 3.5.30729) "

Как мы видим, они используют один и тот же UserAgent, похоже, что в режиме IE 5 Inte rnet Explorer меняет свой пользовательский агент на «MS IE 7.0».

Я также пытаюсь использовать условный комментарий для определения версии браузера IE, похоже, он хорошо работает на IE 5+.

Пожалуйста, проверьте следующий образец:

<center>
    <h1 style="color:blue">How to detect IE</h1>
    <script>
        //detects if user is using Internet Explorer based on the userAgent
        //returns version of IE or false, if browser is not IE
        //Function to detect IE or not
        function IEdetection() {
            var ua = window.navigator.userAgent;
            var msie = ua.indexOf('MSIE ');
            if (msie > 0) {
                // IE 10 or older, return version number
                return ('IE ' + parseInt(ua.substring(
                    msie + 5, ua.indexOf('.', msie)), 10));
            }
            var trident = ua.indexOf('Trident/');
            if (trident > 0) {
                // IE 11, return version number
                var rv = ua.indexOf('rv:');
                return ('IE ' + parseInt(ua.substring(
                    rv + 3, ua.indexOf('.', rv)), 10));
            }
            var edge = ua.indexOf('Edge/');
            if (edge > 0) {
                //Edge (IE 12+), return version number
                return ('IE ' + parseInt(ua.substring(
                    edge + 5, ua.indexOf('.', edge)), 10));
            } 
            // User uses other browser
            return ('Not IE');
        }
        var result = IEdetection();
        document.write("UserAgent: <br/>");
        document.write(window.navigator.userAgent);

        document.write("<br/>Using UserAgent detection, result: <br/>");
        document.write(result);


        var ie = (function () {
            if (window.ActiveXObject === undefined) return null; //Not IE
            if (!window.XMLHttpRequest) return 6;
            if (!document.querySelector) return 7;
            if (!document.addEventListener) return 8;
            if (!window.atob) return 9;
            if (!document.__proto__) return 10;
            return 11;
        })();
        document.write("<br/>Using feature detection, Result:<br/>");
        document.write(ie);
    </script>


<!--[if IE 5]>
<p class="ieversion" data_version="5">You are using Internet Explorer 5.</p>
<![endif]-->
<!--[if IE 7]>
<p class="ieversion" data_version="7">You are using Internet Explorer 7.</p>
<![endif]-->
<!--[if IE 9]>
<p class="ieversion" data_version="9">You are using Internet Explorer 9.</p>
<![endif]-->

    <script>
        if (!document.getElementsByClassName) {
            document.getElementsByClassName = function (search) {
                var d = document, elements, pattern, i, results = [];
                if (d.querySelectorAll) { // IE8
                    return d.querySelectorAll("." + search);
                }
                if (d.evaluate) { // IE6, IE7
                    pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]";
                    elements = d.evaluate(pattern, d, null, 0, null);
                    while ((i = elements.iterateNext())) {
                        results.push(i);
                    }
                } else {
                    elements = d.getElementsByTagName("*");
                    pattern = new RegExp("(^|\\s)" + search + "(\\s|$)");
                    for (i = 0; i < elements.length; i++) {
                        if (pattern.test(elements[i].className)) {
                            results.push(elements[i]);
                        }
                    }
                }
                return results;
            }
        }
        var item = document.getElementsByClassName("ieversion");
        if (item.length > 0) {
            document.write("<br />Using Conditional comment + JavaScript, result:<br/>");
            document.write("IE version: " + item[0].getAttribute("data_version"));
        }
    </script>
</center>

Результат, как показано ниже: * 102 8 *

enter image description here

Since, the Условный комментарий поддерживает от IE 5 до IE 9, но не поддерживается в Inte rnet Explorer 10 и 11. Итак, вы можете использовать Условный комментарий для обнаружения IE 5 ~ IE 9 и использования UserAgent для обнаружения IE 10 и IE 11.

...