Чтение онлайн

ЖАНРЫ

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Библиотека excanvas.js может служить ярким примером библиотеки обеспечения совместимости. Точно так же можно написать другие библиотеки, реализующие конкретные особенности. Методы массивов, введенные стандартом ES5 (раздел 7.9), такие как

forEach, map
и
reduce,
с успехом можно реализовать в ES3, и добавляя соответствующую библиотеку к страницам, можно получить возможность использовать эти мощные методы как часть базовой платформы любого броузера.

Однако иногда невозможно создать полноценную (или эффективную) реализацию особенности в броузерах, не поддерживающих ее. Как уже упоминалось, IE - единственный броузер, который не реализует стандартный API обработки событий, включая метод

addEventListener
регистрации
обработчиков. Броузер IE поддерживает похожий метод с именем
attachEvent
. Однако метод
attachEvent
не такой мощный, как
addEventListener,
и в действительности не существует очевидного способа реализовать все стандартные методы на основе возможностей, предоставляемых броузером IE. Вместо этого разработчики иногда определяют компромиссный метод обработки событий - часто давая ему имя
addEvent
– который переносимым способом может использовать либо
addEventListener,
либо
attachEvent.
Затем они пишут свой программный код, использующий метод
addEvent
вместо
addEventListener
или
attachEvent.

На деле многие веб-разработчики в своих веб-страницах используют фреймворки на языке JavaScript, такие как jQuery (описывается в главе 19). Одна из функций, которая делает эти фреймворки такими необходимыми, - определение нового клиентского прикладного интерфейса, совместимого со всеми броузерами. В jQuery, например, регистрация обработчиков событий выполняется с помощью метода

bind
. Если вы начнете использовать jQuery во всех своих разработках, вам никогда не придется задумываться о несовместимости методов
addEventListener
и
attachEvent.
Подробнее о клиентских фреймворках рассказыватся в разделе 13.7.

13.4.2. Классификация броузеров

Классификация броузеров - это прием тестирования и оценки качества, введенный и отстаиваемой компанией Yahoo!, который привносит определенную долю здравомыслия в иначе неуправляемое разрастание вариантов броузеров разных версий от разных производителей и для разных операционных систем. В двух словах, классификация возможностей броузеров подразумевает выделение на основе тестирования броузеров категории «А», которые обеспечивают полную поддержку всех возможностей, и менее мощных броузеров категории «С». Броузеры категории «А» получают полнофункциональные веб-страницы, а броузеры катетгории «С» - минимальные HTML-версии страниц, в которых не используются сценарии JavaScript и каскадные таблицы стилей CSS. Броузеры, которые не могут быть отнесены к категории «А» или «С», попадают в категорию «X»: обычно это совершенно новые или особенно редкие броузеры. Считается, что броузеры этой категории обеспечивают полную поддержку всех возможностей, и они получают полнофункциональные веб-страницы, однако официально они не поддерживаются и не тестируются.

Подробности о системе классификации возможностей броузеров, используемой компанией Yahoo!, можно найти на страницеНа этой же странице приводится текущий список броузеров, включенных компанией Yahoo! в категории «А» и «С» (этот список обновляется ежеквартально). Даже если вы не собираетесь использовать прием классификации броузеров, список броузеров категории «А» может пригодиться для определения, какие броузеры являются текущими и занимают значительную долю рынка.

13.4.3. Проверка особенностей

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

работоспособный на всех платформах.

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

if (element.addEventListener) { // Проверить наличие метода W3C перед вызовом

element.addEventListener(”keydown", handler, false);

element.addEventListener("keypress", handler, false);

}

else if (element.attachEvent) { // Проверить наличие метода IE перед вызовом

element.attachEvent("onkeydown", handler);

element.attachEvent("onkeypress", handler);

}

else { // В противном случае использовать универсальный прием

element.onkeydown = element.onkeypress = handler;

}

Самое главное, что дает проверка особенностей, - программный код, который не привязан к конкретным броузерам или их версиям. Этот прием работает со всеми броузерами, существующими ныне, и должен продолжить работать с будущими версиями броузеров независимо от того, какой набор особенностей они реализуют. Это означает, что производители броузеров должны определять свойства и методы, обладающие полной функциональностью. Если бы корпорация Microsoft определила метод

addEventListener
, реализовав спецификации W3C лишь частично, это привело бы к нарушениям работоспособности большого числа сценариев, в которых перед вызовом
addEventListener
реализован механизм проверки особенностей.

13.4.4. Режим совместимости и стандартный режим

Когда корпорация Microsoft выпустила броузер IE6, в него была добавлена поддержка некоторых стандартных особенностей CSS, которые не поддерживались в IE5. Однако чтобы обеспечить обратную совместимость с существующими вебстраницами, в нем было реализовано два режима отображения. В «стандартном режиме», или в «режиме совместимости с CSS», броузер следует стандартам CSS. В «режиме совместимости» броузер проявляет нестандартное поведение, свойственное версиям IE4 и IE5. Выбор режима отображения зависит от объявления D0CTYPE в начале HTML-файла. Страницы, вообще не имеющие объявления D0CTYPE и страницы с определенными объявлениями типа документа, типичными в эру использования IE5, отображаются в режиме совместимости. Страницы со строгими объявлениями типа документа (или, для совместимости снизу вверх, с нераспознаваемыми объявлениями типа документа) отображаются в стандартном режиме. Страницы с объявлением, определяемым стандартом HTML5 (

<! D0CTYPE html>
), отображаются в стандартном режиме во всех современных броузерах.

Такое различие между режимом совместимости и стандартным режимом прошло проверку временем. Новые версии IE по-прежнему реализуют его, как и другие современные броузеры, и существование этих двух режимов было узаконено спецификацией HTML5. Различия между режимом совместимости и стандартным режимом обычно имеют значение только для тех, кто пишет HTML- и CSS-код. Однако иногда клиентским сценариям на языке JavaScript бывает необходимо определить, в каком режиме отображается документ. Определить режим отображения можно с помощью свойства

document.compatMode
. Если оно имеет значение «
CSSICompat
», документ отображается в стандартном режиме. Если оно имеет значение «
BackCompat
» (или
undefined
, если такое свойство вообще не существует), документ отображается в режиме совместимости. Все современные броузеры реализуют свойство
compatMode
, и оно стандартизовано спецификацией HTML5.

Поделиться с друзьями: