JavaScript. Подробное руководство, 6-е издание, стр. 179
Данная последовательность не определяет момент, когда документ станет видим пользователю или когда веб-броузер должен начать откликаться на его действия. Все это - особенности каждой конкретной реализации. В случае очень больших документов или очень медленных сетевых подключений теоретически возможно, что веб-броузер будет отображать часть документа и позволять пользователю взаимодействовать с ним до того, как будут выполнены все сценарии. В этом случае действия пользователя могут возбуждать события до начала управляемого событиями этапа выполнения программы.
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]
Ошибки
Все броузеры содержат ошибки, и ни один из них не реализует JavaScript API в полном объеме и в точном соответствии со спецификациями. Иногда создание совместимых клиентских сценариев на языке JavaScript является вопросом знания о существовании ошибок в броузерах и умения обходить их.
К счастью, реализации самого языка JavaScript, выполненные различными производителями броузеров, являются совместимыми и не являются источником описываемых проблем. Все броузеры имеют совместимые реализации ЕСМА-Script 3, и к моменту написания этих строк все производители уже работали над реализацией ECMAScript 5. Переход от ECMAScript 3 к ECMAScript 5 также может породить проблемы несовместимости из-за того, что одни броузеры будут поддерживать строгий режим, а другие - нет, но, как ожидается, производители броузеров обеспечат совместимость своих реализаций ECMAScript 5.
При решении проблем несовместимости в клиентских сценариях на языке JavaScript в первую очередь необходимо идентифицировать проблему. Цикл выпуска новых версий веб-броузеров примерно в три раза короче цикла выпуска новых изданий этой книги, поэтому здесь невозможно с достаточной степенью надежности сообщить, какие особенности и в каких версиях броузеров реализованы, тем более невозможно описать ошибки или отличия реализации особенностей в разных броузерах. Такие подробности лучше всего искать в Сети. В процессе работы над стандартом HTML5 рано или поздно должны появиться испытательные тесты. На момент написания этих строк таких тестов еще не существовало, но, как только они появятся, любой желающий сможет получить богатую информацию о совместимости того или иного броузера. А пока я приведу список веб-сайтов, где вы сможете отыскать полезные сведения:
https://developer.mozilla.org
Центр разработчиков Mozilla (Mozilla Developer Center)
http://msdn.microsoft.com
Сообщество разработчиков, использующих продукты Microsoft (Microsoft Developer Network)
http://developer.apple.com/safari
Центр разработки Safari (Safari Dev Center) на сайте по связям с разработчиками, использующими продукты Apple (Apple Developer Connection)
http://code.google.com/doctype
Компания Google описывает свой проект Doctype как «энциклопедию открытой Сети». Этот сайт, содержимое которого доступно пользователям для редактирования, включает обширные таблицы совместимости для клиентского JavaScript. К моменту написания этих строк данные таблицы содержали только сведения о существовании различных свойств и методов в каждом броузере: они фактически ничего не сообщают о том, насколько корректно работают эти особенности.
http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(HTML_5) [31](
Похожая статья в Википедии на русском языке: http://ru.wikipedia.org/wiki/Cpaвнение_браузеров_(НТМL5). - Прим. перев.
)
Статья в Википедии, в которой оценивается степень реализации особенностей и API стандарта HTML5 в различных броузерах.
http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(Document_Object_ Model)
Аналогичная статья, в которой оценивается степень реализации особенностей DOM.
http:lla.deveria.com/caniuse
Сайт «Когда я смогу воспользоваться...» предоставляет информацию о реализации важных веб-особенностей, позволяя фильтровать ее по различным критериям, и дает рекомендации по их использованию, когда останется достаточно мало броузеров, не поддерживающих их.
http://www.quirksmode.org/dom
Содержит таблицы совместимости различных броузеров со спецификациями W3C DOM.
http://webdevout.net/browser-support
Еще один сайт, созданный с целью предоставить информацию о реализации веб-стандартов различными производителями броузеров.
Обратите внимание, что последние три сайта сопровождаются конкретными людьми. Несмотря на то что эти люди являются опытными разработчиками на клиентском JavaScript, эти сайты могут содержать не самую последнюю информацию.
Конечно, понимание проблем несовместимости между броузерами - это только первый шаг. Далее необходимо решить, как обращаться с этими проблемами. Одна из стратегий заключается в том, чтобы ограничиться использованием только тех особенностей, которые одинаково хорошо реализованы (или легко имитируются) во всех броузерах, поддержку которых вам требуется обеспечить. На эту стратегию опирается веб-сайт «Когда я смогу воспользоваться...», упомянутый