Поддержка событий DOM Level 3 в IE9

Интероперабельные DOM-события являются ключевой частью обещаний относительно «единой разметки» HTML5. Благодаря поддержке DOM-событий в IE9 веб-разработчики могут создавать более интероперабельный код, используя модель событий, которая является более четкой, и предлагать дополнительные функции, которые не представлялись возможными в предыдущих версиях IE .

При авторинге кода событий JavaScript для IE8 или предыдущих версий браузера, веб-разработчикам приходилось создавать отдельный код для IE. Так, к примеру, большинство страниц, на которых используется кросс-браузерный код событий, использует такой код:

 

 if ( <addEventListener detect> ) {
  
 // Модель событий W3C DOM
  
 // Поддерживается в Firefox, Chrome, Safari, Opera и (теперь) IE9
  
 }
  
 else if ( <IE or attachEvent detect> ) {
  
 // Код для модели событий предыдущих версий IE
  
 }

Как вариант, веб-разработчики могут использовать «традиционные» модели событий (событийные атрибуты HTML), поскольку они предлагают наиболее интероперабельные возможности. Тем не менее, это приводит к колоссальной потере функциональности. Издатели JavaScript пытаются устранить различия в реализации моделей событий, но часто это приводило к падению производительности.

С IE9 вы можете создавать ту же разметку и сценарии, и они будут работать во всех браузерах без ущерба для функциональности и производительности. Ознакомьтесь с рекомендациями в целях обеспечения корректной работы обработки событий в IE9. Предварительная версия IE9 позволит увидеть, как ваш код будет работать в IE9. Мы рекомендуем своевременно сообщать о проблемах, найденных в IE9. Поскольку IE9 находится в разработке, документация к выпуску и база данных ошибок поможет понять, решена ли найденная вами проблема.

«Единая разметка» сквозь стандарты

Сегодня разметка по-разному отображается в разных браузерах. Поддержка в IE9 событий DOM Level 3 является огромным шагом вперед, но не в полной мере решает эту проблему. Именно поэтому мы работаем в W3C для создания высококачественных спецификаций и набора тестов с целью обеспечить интероперабельность браузеров.

Вот уже несколько лет мы сотрудничаем с организацией W3C, чтобы внести свой вклад и отзывы о последней версии DOM. После утверждения модель «Level 3» заменит своего почти 10-летнего предшественника, модель DOM Level 2. Это большая честь для нас работать на регулярной основе с членами этой группы, представителями индустрии, а также другими разработчиками браузеров для того, чтобы реализуемые спецификации отвечали сценариям веб-разработчиков и подняли планку интероперабельности.

Есть две отдельные части спецификации DOM Level 3, которым я особенно рад с точки зрения интероперабельности. Во-первых, события «mouseenter/mouseleave» и «focusin/focusout» были недавно одобрены в связи с их полезностью и широкой распространенностью в Интернете.

Вторая часть – это интерфейс событий Keyboard. Знали ли вы, что события «keydown» «keyup» и «keypress» (представлены во всех браузерах) никогда не были стандартизированы? Это лишь одна из причин, почему веб-разработчики не имеют «единой разметки» (скриптов), работающих с клавиатурой во всех браузерах.

В предварительной версии IE9 впервые реализован интерфейс событий Keyboard из спефицикации DOM Level 3. Этот интерфейс определяет модель взаимодействия с клавиатурой, которая решает давние вопросы интернационализации, а также предоставляет удобную высокоуровневую абстракцию клавиатуры (на основе Unicode). Естественно, мы считаем, что предыдущие низкоуровневые интерфейсы клавиатуры (например, «keyCode»), хотя и не на 100% совместимы, будут сосуществовать в браузерах для обеспечения обратной совместимости. Мы будем рады услышать отзывы по этому интерфейсу. А те из вас, кто желает направить свой отзыв прямо в нашу рабочую группу, пишите на www-dom@w3.org.

Чтобы обеспечить совместимость мы предложили первоначальный набор тестов для спецификации DOM Level 3 и планируем и в дальнейшем участвовать в обновлении тестового центра. По мере эволюции спецификаций в направлении рекомендаций эти тесты могут и должны эволюционировать. Мы надеемся получить обратную связь и будем приветствовать отзывы сообщества и авторов других реализаций, чтобы создать тестовый набор DOM Level 3, который будет отвечать целям обеспечения интероперабельности.

Отличия от ранее используемой модели событий IE

В целом модель событий DOM (как Level 2, так и Level 3) разрешает многие сценарии, которых в предыдущей модели IE не было вовсе. Например, новые события DOM допускают следующие сценарии работы во всех браузерах:

  • «Универсальный» слушатель может быть зарегистрирован на поддереве DOM для события, которое не раздувается (требуется «фаза захвата»).
  • Гарантированный порядок активации для нескольких слушателей на одном узле.
  • ·Способность сообщать, на каком узле в настоящее время происходит поток событий (currentTarget).

В результате поддержки новой модели, в стандартном режиме IE9 добавлено несколько изменений в некоторые существующие события в первой сборке предварительной версии. Все эти изменения ограничиваются только режимом стандартов IE9. Например:

  • Умолчания эскалирования/отмены для многих событий, изменены в соответствии со стандартом.
  • Регистрации слушателя событий для старых событий, поддерживаемых в рамках новой модели (с использованием attachEvent/detachEvent), использует тот же сигнал активации, что и addEventListener.
  • Регистрация с помощью атрибутов событий HTML (и их свойств) одновременно активирует MSEventObj (старый объект событий) через свойства window.event, а также новые события DOM через параметр обработчика событий. Это сделано, поскольку атрибут события HTML неоднозначен, то есть неизвестно какую модель ждет веб-разработчик – новую или старую?

Мы создали интерактивную демонстрацию, чтобы показать работу некоторых функций модели DOM. Посмотрите ее на сайте IE9 Test Drive. Мы также привели простой пример того, как события DOM могут быть использованы на практике. Посмотрите его в предварительной версии IE9, а затем посмотрите его в другом браузере; основная идея состоит в том, что модель событий DOM работает одинаково во всех браузерах – «единая разметка» в действии.

То ли еще будет

Пока IE9 находится в разработке, так что это далеко не все. Вот несколько вещей, которые будут доступны в новых обновлениях предварительной версии. За дополнительной информацией обращайтесь к документации.

1. События мутации. События мутации позволяет веб-страницам реагировать на изменения в структуре документа HTML, например, изменения в атрибутах, текстовом наполнении, удаление элементов и дополнений и т.д. В спецификации DOM Level 2 были определены события мутации. Обратите внимание, что далеко не все события мутации реализованы во всех браузерах.

2. DOMContentLoaded. DOM-события спецификации 3 уровня определяют общие рамки и базовый набор событий, но не определяют все события, имеющие отношение к веб-браузеру для поддержки. HTML5 определяет многие дополнительные события, прежде всего DOMContentLoaded и другие, связанные с разбором и загрузкой веб-страниц.

3. Совместимые свойства события. Хотя они и не стандартизированы, многие свойства события, как, например, «keyCode», «cancelBubble» и т.д., широко используются в других браузерах, поэтому многие веб-страницы зависят от их функциональности в целях обеспечения интероперабельности.

Мы призываем веб-разработчиков по всему миру программировать прямо в модели событий DOM. Ознакомьтесь с этой и этой демонстрациями, тестовыми случаями событий DOM Level 3 и поделитесь вашими отзывами.

Трэвис Лейтхэд (Travis Leithead),

программный менеджер Internet Explorer