Главная

Monday, 14 August 2017

Как Microsoft прячет Internet Explorer 11 от web-сайтов.

Всем привет.

После релиза первой preview-версии Internet Explorer 11 на платформе Windows 8.1 можно заметить кроме появления такого вкусного функционала как WebGL, предзагрузка данных, поддержка FlexBox, SPDY и других веб-стандартов ещё и скрытие идентификации браузера как IE.

Ранее уже ходили слухи о том, что браузер Internet Explorer теперь в строке user-agent, передаваемой на сервер, добавляет информацию "like Gecko", а теперь IE11 и вовсе отдаёт на сервер переменную user-agent следующего вида:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko

Именно так, preview-версия IE11 не добавляет информацию "MSIE" или IE в строку user-agent как это было в IE10 и всех предыдущих версиях, тем самым многие веб-сайты, которые ранее с помощью данной строки определяли браузер, теперь не будут обрабатывать IE как сторонний браузер, а будут обрабатывать в "общем" потоке. Стоит отметить, что первые сборки IE 11 (до preview-версии) обладали полной строкой user-agent с использованием идентификатора IE11.

Также компания Microsoft рекомендует отказаться от функций isIE() и подобных переменных в JavaScript, так как IE11 будет возвращать в таких случаях значение "false", ложь. Кроме этого ещё и переменные navigator.appName и navigator.product возвращают совсем другую информацию:
• navigator.appName возвращает "Netscape".
• navigator.product возвращает "Gecko".

Поэтому сейчас можно писать код функции так:
isIE = function isIE() {
       var bIE = navigator.appName == 'Microsoft Internet Explorer';
       var bIE11 = (navigator.appName == 'Netscape') && (new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null);
       return bIE || bIE11;
}();

Как результат, во многих случаях при использовании JavaScript-функций для определения браузера будет выбран путь обработки Gecko-поведения браузера. И на это есть свои причины, о которых ниже.


В IE11 изменили и удалили некоторые JavaScript-функции, аналоги которых уже давно используются в качестве стандарта и реализованы во всех современных браузерах. Итак, первым под нож пошёл набор document.all, который теперь возвращает значение "false", этот пережиток прошлого находился в браузере до версии IE10, включительно, по большому счёту для совместимости.

Ещё один часто используемый метод attachEvent был удалён из Internet Explorer 11, как и detachEvent, рекомендуется использовать общепризнанный аналог addEventListener.

Кроме этого были устранены следующие возможности:
• window.execScript() – аналог eval().
• window.doScroll() – скроллинг страниц в IE.
• script.onreadystatechange – проверка готовности скриптов.
• script.readyState – проверка загрузки скриптов.
• document.selection – получение выделенного текста.
• document.createStyleSheet – добавление нового стиля.
• style.styleSheet – определение стиля в виде объекта.

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

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

Что же сделали в Microsoft? Замена строки user-agent позволяет изменить поведение веб-сайтов, которые теперь не будут идентифицировать браузер как IE и соответственно обрабатывать его отдельными правилами, а считать, что это браузер на двигателе Gecko и как результат - веб-сайты будут корректно работать в новом IE11, но пока эту теорию ещё следует проверить на практике, чем сейчас Microsoft и занимается.

Подобный ход применили именно в preview-версии браузера IE11, это выгодное решение добавит время на мониторинг и исправление проблем, которые могут возникнуть у тестовой группы (пользователей, которые скачают и установят Internet Explorer 11 Preview), проверив новый подход - конечные пользователи финальной версии IE11 получат уже рабочее решение.




No comments:

Post a Comment

А что вы думаете по этому поводу?