На момент написания этой книги последние версии современных броузеров, та_ ких как Firefox, Safari и Opera, прекрасно поддерживали стандарт DOM Level 2. Броузер Internet Explorer 6 в основном совместим со стандартом DOM Level 1, и практически не поддерживает стандарт DOM Level 2. Кроме того, из_за непол_ ной поддержки модуля Core Level 2 в нем вообще не поддерживается модуль Events Level 2, который будет обсуждаться в главе 17. Броузеры Internet Explorer 5 и 5.5 имеют значительные пробелы в совместимости, но достаточно хорошо поддерживают ключевые методы стандарта DOM Level 1, чтобы запус_ кать большинство примеров из этой главы.
Количество доступных броузеров теперь слишком велико, а изменения в сфере поддержки стандартов происходят слишком быстро, чтобы даже пытаться в этой книге определенно утверждать, какие средства DOM поддерживает тот или иной броузер. Следовательно, чтобы определить степень соответствия реали_ зации любого конкретного броузера модели DOM, вам придется полагаться на другие источники информации.
Одним из источников информации о соответствии является сама реализация. В «правильной» реализации свойство implementation объекта Document ссылается на объект DOMImplementation, определяющий метод с именем hasFeature(). Посред_ ством этого метода (если он существует) можно получить сведения о поддержке определенного модуля (или характристики) стандарта DOM. Например, опреде_ лить, поддерживает ли реализация DOM в веб_броузере базовые интерфейсы стандарта DOM Level 1 для работы с HTML_документами, можно с помощью сле_ дующего фрагмента:
// Броузер заявляет о поддержке интерфейсов Core и HTML уровня 1
}
Метод hasFeature() принимает два аргумента: первый – это имя проверяемого мо_ дуля, второй – номер версии в виде строки. Он возвращает true, если указанная версия данного модуля поддерживается. В табл. 15.3 перечислены пары «назва_ ние/номер версии», определенные в стандартах DOM Level 1 и Level 2. Обратите внимание: названия модулей нечувствительны к регистру, поэтому вполне допус_ тимо чередовать прописные и строчные символы в их именах. В четвертом столб_ це таблицы указано, какие модули требуются для поддержки данного модуля, и следовательно, их наличие подразумевается в случае возвращения методом зна_ чения true. Например, если метод hasFeature() показал, что поддерживается мо_ дуль MouseEvents, это подразумевает также, что поддерживается модуль UIEvents, что, в свою очередь, подразумевает поддержку модулей Events, Views и Core.
Таблица 15.3. Модули, совместимость с которыми можно проверить методом hasFeature()
Название
Версия
Описание
Подразумевает
модуля
поддержку
HTML
1.0
Интерфейсы Core и HTML уровня 1
XML
1.0
Интерфейсы Core и XML уровня 1
Core
2.0
Интерфейсы Core уровня 2
HTML
2.0
Интерфейсы HTML уровня 2
Core
XML
2.0
Интерфейсы XML уровня 2
Core
Views
2.0
Интерфейс AbstractView
Core
StyleSheets
2.0
Универсальный обход таблицы стилей
Core
CSS
2.0
CSS_стили
Core, Views
CSS2
2.0
Интерфейс CSS2Properties
CSS
Events
2.0
Инфраструктура для обработки событий
Core
UIEvents
2.0
События пользовательского интерфейса
Events, Views
(плюс модули Events и Views)
MouseEvents
2.0
События мыши
UIEvents
HTMLEvents
2.0
HTML_события
Events
В Internet Explorer 6 метод hasFeature() возвращает true только для модуля HTML и версии 1.0. Он не сообщает о соответствии любым другим модулям, перечис_ ленным в табл. 15.3 (хотя, как мы увидим в главе 16, он поддерживает большин_ ство основных применений модуля CSS2).
В этой книге документируются интерфейсы, составляющие все DOM_модули, перечисленные в табл. 15.3. Модули Core и HTML рассматриваются в этой главе,
модули StyleSheets, CSS и CSS2 – в главе 16, а различные модули, относящиеся к событиям, – в главе 17. Четвертая часть этой книги содержит полное описание всех модулей.
15.4. Обзор объектной модели W3C DOM
Информации, возвращаемой методом hasFeature(), не всегда можно доверять. Как отмечалось ранее, IE 6 сообщает о соответствии средств HTML уровню 1, хо_ тя в этом соответствии есть некоторые проблемы. В то же время Netscape 6.1 со_ общает о несоответствии модулю Core Level 2, хотя этот броузер почти совместим с этим модулем. В обоих случаях нужны более подробные сведения о том, что именно совместимо, а что нет. Однако объем этой информации слишком велик, и она слишком изменчива, чтобы включать ее в печатное издание.
Те, кто активно занимается веб_разработкой, несомненно, уже знают или скоро узнают о многих специфических для броузеров деталях совместимости. Кроме того, в Интернете есть ресурсы, которые могут оказаться полезными. Организа_ ция W3C выпустила набор тестов (правда, не совсем полный) для проверки степе_ ни поддержки некоторых DOM_модулей, доступный на сайте http://www.w3c.org/ DOM/Test/. К сожалению, результаты этих тестов для наиболее распространен_ных броузеров опубликованы не были.
Возможно, в поисках информации о совместимости и соответствии стандартам лучше обратиться к независимым сайтам в Интернете. Один из достойных упо_ минания сайтов – http://www.quirksmode.org; его поддерживает Петер_Пауль Кох (Peter_Paul Koch). Он опубликовал результаты обширных исследований о со_ ответствии броузеров стандартам CSS и DOM. Еще один замечательный сайт – http://webdevout.net/browser_support.php; он поддерживается Дэвидом Хаммон_дом (David Hammond).