После недавнего релиза первой превью-версии 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
Именно так, превью-версия IE11 не добавляет информацию "MSIE" или IE в строку user-agent как это было в IE10 и всех предыдущих версиях, тем самым многие веб-сайты, которые ранее с помощью данной строки определяли браузер, теперь не будут обрабатывать IE как сторонний браузер, а будут обрабатывать в "общем" потоке. Стоит отметить, что первые сборки IE 11 (до превью-версии) обладали полной строкой user-agent с использованием идентификатора IE11.
Также компания Microsoft рекомендует отказаться от функций isIE()
и подобных переменных в JavaScript, так как IE11 будет возвращать в таких случаях значение "false", ложь. Кроме этого ещё и переменные navigator.appName
и navigator.product
возвращают совсем другую информацию:
navigator.appName
возвращает "Netscape".navigator.product
возвращает "Gecko".
Как результат, во многих случаях при использовании 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 и занимается.
Подобный ход применили именно в превью-версии браузера IE11, это выгодное решение добавит время на мониторинг и исправление проблем, которые могут возникнуть у тестовой группы (пользователей, которые скачают и установят Internet Explorer 11 Preview), проверив новый подход - конечные пользователи финальной версии IE11 получат уже рабочее решение.