Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

4. По окончании анализа документа значение свойства

document.readyState
изменяется на «
interactive
».

5. Выполняются все сценарии, имеющие атрибут

defer
, в том порядке, в каком они встречаются в документе. В этот момент также могут выполняться асинхронные сценарии. Отложенные сценарии имеют доступ к полному дереву документа и не должны использовать метод
document.write
.

6. Броузер возбуждает событие

«DOMContentLoaded»
в объекте
Document
. Это событие отмечает переход от этапа синхронного выполнения сценариев к управляемому событиями асинхронному этапу выполнения программы. Следует, однако, отметить, в этот период также могут выполняться асинхронные сценарии, которые не были еще выполнены.

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

document.readyState
получит значение
«complete»
и веб-броузер возбудит событие
«load»
в объекте
Window
.

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

Это идеализированная последовательность выполнения, и не все броузеры придерживаются ее в точности. Событие

«load»
поддерживается повсеместно: его возбуждают все броузеры, и оно является универсальным инструментом определения момента окончания загрузки документа и его готовности к выполнению операций. Событие
«DOMContentLoaded»
возбуждается перед событием
«load»
и поддерживается всеми текущими броузерами, кроме IE. Свойство
document.readyState
реализовано в большинстве текущих броузеров на момент написания этих строк, но значения, которые получает это свойство, отличаются между броузерами. Атрибут
defer
поддерживается всеми современными версиями IE, но только недавно был реализован в других броузерах. Поддержка атрибута
async
до сих пор не получила широкого распространения, но асинхронное выполнение сценариев с использованием приема, представленного в примере 13.4, поддерживается всеми текущими броузерами. (Однако имейте в виду, что возможность динамической загрузки сценариев с помощью функции, такой как
loadasync,
размывает границы между этапом загрузки сценариев и этапом выполнения программы, управляемым событиями.)

Данная последовательность не определяет момент, когда документ станет видим пользователю или когда веб-броузер должен начать откликаться на его действия. Все это - особенности каждой конкретной реализации. В случае очень больших документов или очень медленных сетевых подключений теоретически возможно, что веб-броузер будет отображать часть документа и позволять пользователю взаимодействовать с ним до того, как будут выполнены все сценарии. В этом случае действия пользователя могут возбуждать события до начала управляемого событиями этапа выполнения программы.

13.4. Совместимость на стороне клиента

Веб-броузер - это своего рода операционная система для веб-приложений, но Всемирная паутина - это разнородная среда, и ваши веб-документы и приложения будут просматриваться и выполняться в броузерах разных возрастов (от ультрасовременных бета-версий до броузеров, возраст которых исчисляется десятилетиями, таких как IE6), разных производителей (Microsoft, Mozilla, Apple, Google, Opera) и выполняющихся в разных операционных системах (Windows, Mac OS, Linux, iPhone OS, Android). Поэтому достаточно сложно написать нетривиальную клиентскую программу на языке JavaScript, которая будет корректно работать на таком многообразии платформ.

Проблемы совместимости на стороне клиента делятся на три основные категории:

Эволюционные

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

Отсутствие реализации

Иногда мнения производителей броузеров относительно полезности той или иной особенности расходятся. Некоторые производители реализуют ее, другие - нет. Это не проблема отличий между новыми версиями броузеров, поддерживающих особенность, и старыми версиями, не поддерживающими ее. Эта проблема связана с производителями броузеров, одни из которых решили реализовать особенность, а другие - нет. Например, ІЕ8 не поддерживает элемент <canvas>, хотя все остальные броузеры реализовали его поддержку. Еще более вопиющий пример: корпорация Microsoft долго отказывалась от намерений реализовать спецификацию DOM Level 2 Events (которая определяет метод addEventListener и связанные с ним). Эта спецификация была выпущена почти десять лет тому назад, и другие производители давно реализовали ее поддержку. [30]

30

Справедливости ради следует отметить, что версия IE9 поддерживает и элемент <canvas>, и метод addEventListener.

Ошибки

Все броузеры содержат ошибки, и ни один из них не реализует JavaScript API в полном объеме и в точном соответствии со спецификациями. Иногда создание совместимых клиентских сценариев на языке JavaScript является вопросом знания о существовании ошибок в броузерах и умения обходить их.

К счастью, реализации самого языка JavaScript, выполненные различными производителями броузеров, являются совместимыми и не являются источником описываемых проблем. Все броузеры имеют совместимые реализации ЕСМА-Script 3, и к моменту написания этих строк все производители уже работали над реализацией ECMAScript 5. Переход от ECMAScript 3 к ECMAScript 5 также может породить проблемы несовместимости из-за того, что одни броузеры будут поддерживать строгий режим, а другие - нет, но, как ожидается, производители броузеров обеспечат совместимость своих реализаций ECMAScript 5.

  • Читать дальше
  • 1
  • ...
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: