События DOM Level 3 в Internet Explorer 9

Интероперабельные 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 и поделитесь с нами вашими отзывами.