Internet Explorer 11 (IE11)

В отличие от IE10, версия которого для «устаревшей» Windows 7 вышла лишь через несколько месяцев после версии для Windows 8, новый IE11 в версии для Windows 7 не заставил себя долго ждать.

Неизбежное исключение

Начнём с печального.

  • Кромки некоторых HTML-элементов со скруглёнными углами теперь размыты (!): по периметру имеют видимые невооружённым глазом однопиксельные полоски промежуточного цвета — визуально очень напоминает векторное изображение, растеризованное без привязки к пиксельной сетке. (Перемудрили с аппаратным ускорением средствами видеокарты?)
  • При попытке перейти на вкладку «Сеть» в панели веб-разработки (вызываемой по нажатию клавиши F12) IE11 намертво зависает. Приходится завершать его работу через Диспетчер задач, после этого контекстные меню начинают появляться в полупрозрачном (полуневидимом) виде и полностью проявляются только при наведении указателя мыши на само полупрозрачное меню, причём не только в IE, но и в проводнике Windows (!). Помогает только перезагрузка компьютера. Обновлено: как минимум начиная с версии IE 11.0.9600.17126 зависания больше не наблюдаются.
  • Судя по всему, условные комментарии теперь учитываются только в том случае, если режим эмуляции старой версии IE установлен на уровне HTTP-заголовка/мета-элемента X-UA-Compatible. При переключении в такой режим средствами панели веб-разработки условные комментарии теперь игнорируются даже в режимах эмуляции тех версий IE (IE9 и ниже), которыми условные комментарии поддерживались. Таким образом, в разрезе отладки сайтов веб-разработчиками эти режимы окончательно стали бесполезны. К счастью, хотя бы есть широкий выбор бесплатно доступных официальных образов виртуальных машин, содержащих разные версии Windows с предыдущими версиями IE и предназначенных для веб-разработчиков. Обновлено: как минимум начиная с версии IE 11.0.9600.17126 при переключении в режим совместимости с IE 5—9 средствами панели разработчика условные комментарии корректно распознаются.
  • Элементы форм по-прежнему (как в IE10) не «родные» для ОС, а в навязанном «плоском» стиле Windows 8. С точки зрения удобства пользователя (юзабилити) особенно печален тот факт, что элементы форм в этом стиле никак не реагируют на наведение указателя мыши (например, радио-кнопка не изменяет свой вид при наведении указателя мыши на привязанный к ней элемент LABEL).
  • По-прежнему не поддерживаются нулевые значения атрибутов rowspan и colspan.
  • Автоматическая установка фокуса с помощью HTML5-атрибута autofocus по-прежнему не работает. При этом формально атрибут поддерживается, и одноимённое DOM-свойство существует, поэтому определение возможностей браузера (feature detection), бессильное перед некорректными реализациями формально доступных функций, здесь не сработает, и придётся, как и прежде, просто безусловным образом устаналивать фокус с помощью JavaScript. (См. баг-репорт № 783017 в баг-трекере Microsoft.)
  • В отличие от всех других браузеров, по-прежнему не поддерживается чтение неподдерживаемых значений некоторых поддерживаемых атрибутов (например, colspan="0") — такие атрибуты, судя по всему, игнорируются на стадии разбора HTML-кода и в DOM-дерево даже не попадают. Обновлено (): похоже, в текущей версии IE11 (11.0.9600.18426) чтение неподдерживаемых значений атрибутов работает; то же касается текущей версии (EdgeHTML 13.10586) нового браузера Microsoft — Edge.
  • В отличие от других браузеров, в IE11 URL-кодированные строки в адресной строке по-прежнему отображаются в нечитабельном закодированном виде, затрудняя работу с сайтами вроде Википедии, где подавляющее большинство URL-адресов страниц содержат нелатинские символы.

X-UA-Compatible и edge-режим по умолчанию

Для включения наиболее современного режима работы IE теперь достаточно просто использовать DOCTYPE-объявление HTML5: <!DOCTYPE html>.

Использование HTTP-заголовка ответа сервера или одноимённого мета-элемента X-UA-Compatible отныне не рекомендуется (deprecated) и позиционируется лишь как способ временного переключения браузера в режим совместимости с предыдущими версиями IE на период обновления сайта, в новых версиях IE работающего неправильно.

При этом из адресной строки наконец-то удалена кнопка переключения в режим совместимости с IE7, которая впервые появилась в IE8 и которую пользователи зачастую нажимали случайно, не понимая её смысла и навсегда переключая сайт в режим IE7 (состояние запоминалось и автоматически восстанавливалось даже после перезапуска браузера).

Что ж, лучше поздно, чем никогда.

Объект document.all

Проверка наличия нестандартного объекта document.all долгое время использовалась как удобный способ обнаружения IE в JS. Теперь, начиная с IE11, объект document.all недоступен.

Впрочем, у объекта document есть ряд нестандартных свойств с префиксом ms, например msHidden, и после выхода IE12 теоретически возможно будет при острой необходимости фильтровать IE11 с их помощью.

CSS

  • Flexible Box Layout (Flexbox) — фундаментально новый CSS-механизм взаимного расположения HTML-элементов — теперь поддерживается в стандартном синтаксисе. В IE10, выпуск которого, по пагубной традиции Microsoft, был жёстко привязан к выпуску новой версии Windows, поддерживалась лишь предварительная версия Flexbox, устаревшая уже на момент выхода IE10.
  • Поддержка CSS-свойства pointer-events позволяет делать отдельные элементы «прозрачными» для событий мыши. Начиная с IE9 эта возможность была доступна лишь в SVG-файлах, а теперь работает и для HTML-элементов.
  • К сожалению, полезнейшее @-правило @supports не поддерживается (видимо, не успели к выходу Windows 8.1 ;-). Поэтому применить подход Progressive Enhancement на уровне чистого CSS (без помощи JavaScript), например, в отношении Flexbox, в IE11 не удастся. Другие браузеры — Firefox, Chrome и Opera — правило @supports поддерживают.

JavaScript

  • Поддержка стандарта трёхмерной веб-графики WebGL. В предыдущей — 10-й — версии IE от поддержки WebGL отказались, ссылаясь на соображения безопасности.
  • Объект-свойство dataset HTML-элементов позволяет манипулировать произвольными данными, привязанными к HTML-элементу с помощью атрибутов с префиксом data-.
  • Поддержка Mutation Observers даёт возможность отслеживать изменения DOM с помощью событий, подобных событиям типа change, издавна доступных для полей форм.
  • Поддержка FullScreen API даёт веб-приложениям (например, 3D-играм) возможность работать в полноэкранном режиме.
  • Поддержка новых ключевых слов let и const.
  • Поддержка объектов Map, Set, WeakMap.
  • Поддержка свойства __proto__ для функциональной совместимости с другими браузерами.
  • Internationalization API призван помочь в создании многоязычных веб-приложений.
  • Поддержка стандарта Pointer Events без префиксов. Спецификация Pointer Events определяет унифицированный механизм взаимодействия веб-приложений с различными устройствами ввода — такими как мышь, перо или чувствительный к прикосновениям экран («тачскрин»). Любопытно, что работы по реализации поддержки Pointer Events в Firefox, Webkit и Blink (Chromium) ведутся силами Microsoft. Существует polyfill-библиотека Hand.js, кроссбраузерно реализующая поддержку Pointer Events вне зависимости от наличия встроенной поддержки в конкретном браузере.

Прочее

  • IE11 поддерживает протокол SPDY, призванный ускорить загрузку страниц с сайтов, поддерживающих SPDY на уровне сервера. Правда, почему-то только в Windows 8+ (вероятно, по той же причине, по которой Windows 7 Home Premium поддерживает лишь 16 ГБ оперативной памяти ;-). Другие браузеры — такие как Firefox, Chrome и Opera — поддерживают SPDY вне зависимости от версии операционной системы.