Кроссбраузерность

Pause

Кроссбра́узерность — свойство веб-страниц и веб-приложений одинаково открываться и работать в разных браузерах: при переходе от одной программы к другой сохраняются содержание, внешний вид и поведение страниц[1]. Разработчику приходится учитывать разные программы, включая не самые свежие версии, разные устройства — от компьютеров до телевизоров, — и программы чтения с экрана[1]. Термин закрепился в практике веб-разработки; литература не называет ни автора, ни даты его появления, поэтому предмет статьи составной: история браузеров, стандарты и методики проверки совместимости.

Проблема совместимости возникла из технического устройства веба: страницы исполняются внутри браузера, и каждая программа отрисовывает их собственным движком[1]. В 1990-е годы, в эпоху первых браузерных войн, производители добавляли нестандартные возможности, и одна и та же страница в разных программах выглядела по-разному[2]. Позднее конкуренция сменилась консолидацией: в 2013 году браузер Opera отказался от собственного движка в пользу WebKit[3], а затем и Microsoft Edge перешёл на открытый движок Chromium[4].

Для обеспечения одинаковой работы страниц применяют набор взаимосвязанных методов: опору на стандарты Консорциума Всемирной паутины[5], определение поддержанных возможностей прямо в коде, полифиллы, а также адаптивный веб-дизайн для разных экранов[1]. Проверку ведут и вручную, и автоматизированными инструментами, сравнивая отрисованные страницы[6]. Уход старых программ не отменяет различий: справочные таблицы поддержки возможностей обновляются до сих пор[7].

Общие сведения
Что важно знать
Кроссбраузерность
Область использования веб-разработка, веб-программирование, тестирование программного обеспечения
Ключевые слова браузер, веб-приложение, HTML, CSS
Базовые понятия веб-стандарты, вёрстка, рендеринг, кроссплатформенность

Понятие и границы предмета

Практическое содержание кроссбраузерности видно из методики справочного руководства Mozilla: кроссбраузерная проверка обеспечивает работу сайта во всём разнообразии браузеров и устройств, а до начала разработки команда выбирает «приемлемый» набор программ и версий, которому сайт обязан соответствовать[1]. Речь не о пиксельном совпадении, а о согласованности: содержание, навигация и основные действия доступны в каждой программе из набора[1].

Предмет стоит отличать от кроссплатформенности программного обеспечения. Кроссплатформенная программа приносит на каждую операционную систему собственную сборку, а веб-страница едина: среду исполнения выбирает посетитель[1]. Кроссбраузерность — частный случай совместимости, где роль «платформ» играют браузеры и их версии[1].

Кроссбраузерность не сводится к правильности кода. Соответствие стандартам — необходимое условие, но не гарантия: программы по-разному внедряют стандарты и по-разному трактуют спорные места спецификаций[8]. Исследователи определяют кроссбраузерные несоответствия как заметные расхождения между браузерами в отображении или поведении одной и той же страницы[6][8].

История

Первые браузерные войны

Историю браузеров середины 1990-х годов литература описывает как конкурентную борьбу за долю аудитории — войны браузеров[2]. Производители вводили собственные расширения языков HTML и CSS, и страница, собранная под одну программу, в другой теряла оформление[2][8]. Разработчикам оставалось дублировать код либо предупреждать посетителей о нужном браузере[8].

undefined

Стандартизация и Acid-тесты

Ответом на разнобой стала работа по общим правилам: Консорциум Всемирной паутины публикует стандарты веб-технологий, задающие единый контракт между страницей и программой для её отрисовки[5]. Именно соответствие стандартам считается основным средством достижения кроссбраузерности[5][8].

Соблюдение стандартов проверяли публичными испытаниями. Коалиция Web Standards Project опубликовала тестовую страницу Acid2 для проверки корректной поддержки веб-стандартов; в тест намеренно включён невалидный CSS — проверялось умение обходить некорректные описания стилей[9]. Позднее появился усложнённый тест Acid3, а прохождение таких проверок стало показателем совместимости и предметом публичного соперничества[9].

Консолидация движков

Новый этап открылся выходом браузера Google Chrome в 2008 году: разработчики объявили о запуске бета-версии более чем в ста странах, представив её как «свежий взгляд» на браузер и источник ускорения развития веба[10].

К консолидации присоединялись давние соперники. В феврале 2013 года Opera объявила о переходе на движок WebKit: программами Opera пользовались около трёхсот миллионов человек, и компания сочла дальнейшую поддержку собственного движка Presto излишней[3], называя главным мотивом производительность[11]. Microsoft в новых версиях Edge отказалась от исторического движка Trident в пользу открытого Chromium: старый движок сохранился лишь в режиме совместимости, поддерживаемом как минимум до 2029 года[4]. Наконец, 15 июня 2022 года Microsoft окончательно убрала Internet Explorer: попытки открыть программу перенаправляют пользователя в Edge[12]; к моменту ухода доля программы опустилась ниже одного процента[4].

undefined

Причины кроссбраузерных несоответствий

Различия движков

Каждый браузер отрисовывает страницу собственным движком: сегодня страницы открываются на движках Blink, Gecko и WebKit, а исторические Trident и Presto ушли в прошлое вместе со своими программами[4][3]. Движок определяет, как разметка и стили превращаются в изображение на экране: при одинаковом коде программы могут по-разному вычислять размеры, строить таблицы и воспроизводить типографику[8]. Для JavaScript существует отдельный класс программ — движок JavaScript, и набор поддержанных возможностей языка также различается между программами[1].

Кроссбраузерность остаётся самостоятельной инженерной задачей: код, проверенный в одной программе, требует проверки в остальных, и ручной проверки всех сочетаний «браузер — версия» уже не выдержать[6].

Поддержка стандартов и вендорные префиксы

Стандарты внедряются постепенно: пока возможность не закреплена в спецификации, производители помечают экспериментальные свойства вендорными префиксами — служебными приставками в имени свойства, указывающими программу, для которой оно предназначено[8]. Страница, использующая только префиксные свойства, работает в одной программе и ломается в остальных[8]. Справочные таблицы собирают сведения о том, какие версии каких программ поддерживают каждую возможность языка, и служат при планировании разработки[7].

Среди причин несоответствий обзорная литература называет также неполную реализацию спецификаций и ошибки конкретных программ[8].

Ошибки и устаревшие решения

Третья группа причин — историческая: браузеры поддерживают режим совместимости для старых сайтов, а сами старые страницы содержат конструкции, написанные под особенности конкретных программ[8][6].

Поддержка устаревшего наследия сама создаёт несовместимость. Показателен режим Internet Explorer внутри Edge: он подгружает исторический движок ради старых корпоративных страниц, и Microsoft планирует его закрытие, потому что сопровождение такого наследия дорого, а миграция занимает годы[4].

undefined

Методы обеспечения совместимости

Веб-стандарты и валидация

Основной метод — опора на стандарты: Консорциум Всемирной паутины фиксирует языки HTML, CSS и JavaScript, на которых строится страница, и чем строже код им следует, тем предсказуемее его отрисовка[5]. Российские учебные работы описывают кроссбраузерность как обязательное требование к современным веб-приложениям: проверка в основных браузерах входит в процесс их разработки[13].

Сравнительные исследования показывают, что различия в отрисовке сохраняются даже между современными программами, поэтому стандарты сокращают, но не снимают задачу проверки[14].

Прогрессивное улучшение

Справочное руководство Mozilla описывает общий приём: код ветвят по результатам определения возможностей — программа спрашивает, поддержана ли возможность, и в зависимости от ответа выполняет разные участки[1]. Отсутствующую возможность имитирует полифилл; другой путь — библиотеки, где разработчик пишет единый код, а реализацию подбирает программа[1]. На той же идее строится стратегия прогрессивного улучшения: страница конструируется от простого, доступного любому браузеру базового слоя содержания, а оформление и поведение наращиваются слоями по мере поддержки[1].

Некоторые вещи невозможно сделать одинаково везде, и команде приходится заранее принять перечень допустимых различий[1].

undefined

Адаптивный дизайн и мобильные платформы

Сайт открывают на компьютерах, планшетах и телевизорах[1], и метод ответа — адаптивный веб-дизайн: одна страница перестраивается под ширину экрана без отдельных версий[1]. Мобильные браузеры на Android и iOS добавляют к матрице проверок ещё одно измерение[1].

В модуле управления «умным домом» совместимость с основными браузерами была заявлена в задании наравне с функциональностью[15].

undefined

Тестирование и инструменты

Матрица браузеров и ручная проверка

Проверка начинается с матрицы: заранее выбирают «приемлемый» набор браузеров, версий, устройств и операционных систем[1]. Доли браузеров на рынке — общедоступная статистика счётчиков посещений, ей доверяют и журналисты[16][4]. На момент ухода Internet Explorer на новую программу Microsoft приходилось около девяти процентов настольного рынка[12], и такую долю матрица игнорировать не могла[16].

Дальше страницы проходят вручную — проверяют открытие, навигацию, формы и оплату, а найденные расхождения исправляют и повторяют проверку: правка для одной программы способна сломать страницу в другой[1].

Автоматизированные инструменты

Ручной цикл дополняет автоматизация: открытый набор Selenium управляет реальными браузерами, выполняя те же действия, что и человек, и одни и те же сценарии прогоняются во всех программах матрицы[17].

Научные работы ставят задачу находить несоответствия автоматически: Месбах и Прасад предложили обходить страницы в разных браузерах и сравнивать их состояния[6]. Кроссчек объединяет обход сайта и сравнение состояний страниц[18]. Инструмент X-PERT выделяет точные места расхождений, сопоставляя внутреннее представление страницы в разных браузерах[19]. Для страниц, целиком отрисованных на полотне, Баджаммал и Месбах предложили судить о корректности по визуальному выводу[20].

undefined

Критика и злоупотребления

Монокультура движка

Консолидация движков сняла значительную часть старых проблем, но создала новые. Когда большинство настольных программ работает на одном открытом проекте, несоответствий меньше — но исчезает внешнее давление, заставлявшее следовать стандартам[11][2]. Переход Opera на WebKit описывали именно в этих терминах: уход последнего независимого движка убирал стимул писать страницы, совместимые «со всеми»[3].

Оборотная сторона ухода старых программ — лишний код: устаревшие обходные приёмы долго поддерживают в памяти о былых расхождениях, усложняя сопровождение[4][8].

undefined

Приёмы-хаки и их цена

История знает и прямой обход: страницу определяют по признакам программы и отдают каждому браузеру собственный код — от нестандартных свойств до специальных конструкций, понятных только одной программе[8][2]. Цена высокая: ветвления по программе умножают объём кода и оставляют наследие, которое поддерживают годами после исчезновения самой программы[8][4].

Современные методики рекомендуют опираться на определение возможностей, а не на название программы: страница спрашивает не «кем ты открыта?», а «умеешь ли ты это?»[1]. Научные инструменты поиска несоответствий показывают места страницы, требующие внимания[21][18].

Связь с другими понятиями

Кроссбраузерность связана с несколькими смежными требованиями. С кроссплатформенностью её объединяет идея одинаковой работы в разных средах, а различает объект: кроссплатформенное программное обеспечение приносит среду с собой, тогда как веб-страница исполняется в среде, выбранной посетителем[1]. С адаптивным веб-дизайном её связывает учёт устройств; различие в том, что адаптивность управляет компоновкой под размер экрана, а кроссбраузерность — согласованностью поведения в разных программах[1].

Смежное требование — доступность: кроссбраузерная проверка включает и программы чтения с экрана, которыми пользуются незрячие люди[1]. Наконец, кроссбраузерность не тождественна валидности кода: одинаковую работу страницы проверяют только исполнением во всех целевых программах[5][8], и тесты Acid — исторический пример этой границы[9].

Примечания

  1. ↑ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Introduction to cross-browser testing (англ.). MDN Web Docs. Mozilla. Дата обращения: 2 октября 2026.
  2. ↑ 1 2 3 4 5 Weber M. Browsers and Browser Wars (англ.) // The SAGE Handbook of Web History. — 2019. — doi:10.4135/9781526470546.n19.
  3. ↑ 1 2 3 4 Opera hits 300 million users, promptly moves to WebKit (англ.). Engadget. Engadget (13 февраля 2013). Дата обращения: 2 октября 2026.
  4. ↑ 1 2 3 4 5 6 7 8 Microsoft is ending support for Internet Explorer mode in Edge (англ.). Mashable. Mashable (26 сентября 2026). Дата обращения: 2 октября 2026.
  5. ↑ 1 2 3 4 5 Web Standards (англ.). W3C. World Wide Web Consortium. Дата обращения: 2 октября 2026.
  6. ↑ 1 2 3 4 5 Mesbah A., Prasad M. R. Automated cross-browser compatibility testing (англ.) // Proceedings of the 33rd International Conference on Software Engineering. — 2011. — P. 561—570. — doi:10.1145/1985793.1985870.
  7. ↑ 1 2 Can I use... Support tables for HTML5, CSS3, etc (англ.). caniuse.com. caniuse.com. Дата обращения: 2 октября 2026.
  8. ↑ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Barskar N., Patidar C. P. A Survey on Cross Browser Inconsistencies in Web Application (англ.) // International Journal of Computer Applications. — 2016. — Vol. 137, no. 4. — P. 37—41. — doi:10.5120/ijca2016908711.
  9. ↑ 1 2 3 Acid2 Browser Test (англ.). The Web Standards Project. Web Standards Project. Дата обращения: 2 октября 2026.
  10. ↑ A fresh take on the browser (англ.). Official Google Blog. Google (1 сентября 2008). Дата обращения: 2 октября 2026.
  11. ↑ 1 2 Opera goes WebKit: It's all about performance (англ.). ZDNet. ZDNet (13 февраля 2013). Дата обращения: 2 октября 2026.
  12. ↑ 1 2 Microsoft to retire Internet Explorer browser and redirect users to Edge (англ.). The Guardian. Guardian News & Media (15 июня 2022). Дата обращения: 2 октября 2026.
  13. ↑ Станкевич А. М., Семёнов Г. Н. Современные подходы к разработке веб-приложений на примере сайта сбалансированного питания // Успехи в химии и химической технологии. — 2015. — Т. 29, № 4 (163).
  14. ↑ Гылыджов Б., Сапарбаев У., Базарсахедов Э., Нурмухаммедов М. Альтернативы браузеров: особенности и визуализация web-документов // Инновационная наука. — 2024. — № 2-2.
  15. ↑ Кувинов А. С., Иванько М. А. Разработка модульной системы «Умный дом», управляемой с помощью кроссбраузерного Веб приложения // Вестник Московского государственного университета печати. — 2015. — № 1.
  16. ↑ 1 2 Browser Market Share Worldwide (англ.). StatCounter Global Stats. StatCounter. Дата обращения: 2 октября 2026.
  17. ↑ Selenium Overview (англ.). Selenium Documentation. Selenium. Дата обращения: 2 октября 2026.
  18. ↑ 1 2 Choudhary S. R., Prasad M. R., Orso A. CrossCheck: Combining Crawling and Differencing to Better Detect Cross-browser Inconsistencies in Web Apps (англ.) // Proceedings of the 2012 IEEE Fifth International Conference on Software Testing, Verification and Validation. — 2012. — P. 171—180. — doi:10.1109/icst.2012.97.
  19. ↑ Choudhary S. R., Prasad M. R., Orso A. X-PERT: Accurate identification of cross-browser issues in web applications (англ.) // Proceedings of the 2013 35th International Conference on Software Engineering. — 2013. — P. 702—711. — doi:10.1109/icse.2013.6606616.
  20. ↑ Bajammal M., Mesbah A. Web Canvas Testing Through Visual Inference (англ.) // Proceedings of the 2018 IEEE International Conference on Software Testing, Verification and Validation. — 2018. — P. 193—203. — doi:10.1109/icst.2018.00028.
  21. ↑ Choudhary S. R., Prasad M. R., Orso A. X-PERT: A web application testing tool for cross-browser inconsistency detection (англ.) // Proceedings of the 2014 International Symposium on Software Testing and Analysis. — 2014. — P. 417—420. — doi:10.1145/2610384.2628057.

Литература

Pause