
Редакция Romanov Lab · Опубликовано
Фраза «работает в современных браузерах» слишком расплывчата для приёмки. Функция может поддерживаться в актуальном настольном браузере и отсутствовать во встроенном просмотрщике приложения. Даже наличие API не гарантирует работу без нужного разрешения или в конкретном контексте. Проверку начинают с пользовательского сценария и границ поддержки, а не с одной зелёной отметки в справочнике.
Согласуйте матрицу и последствия отказа
Определите браузеры, ОС и значимые встроенные среды по аудитории и договорённостям проекта. Если аналитики нет, зафиксируйте стартовую матрицу как предположение и пересмотрите её после появления данных. Для каждого сценария укажите уровень: полная функция, упрощённый вариант или понятное сообщение об ограничении. Не заменяйте это автоматическим запретом входа для целого семейства браузеров.
Вымышленный пример: новый интерфейс использует современную CSS-компоновку карточек. При отсутствии возможности карточки остаются обычным вертикальным списком с теми же ссылками. Для бронирования такая же логика строже: если расширенный календарь недоступен, нужен рабочий выбор даты или другой согласованный путь, а не пустая область.
Читайте поддержку на уровне конкретной возможности
Baseline в MDN даёт ориентир по совместимости возможностей в определённом наборе браузеров. Он не заменяет испытания доступности, производительности и всех возможных встроенных сред. В таблице конкретного API смотрите подфункции, примечания, ограничения и необходимость особого контекста. Поддержка интерфейса целиком не означает поддержку каждого метода и параметра.
Сохраняйте в техническом решении точную возможность и ссылку на справочник. Запись «используем новый CSS» бесполезна для будущей проверки. Запись «базовая сетка работает без дополнительного свойства; улучшение включается после проверки этого свойства» позволяет понять риск и план удаления запасного кода позднее.
Проверяйте возможность, а не название браузера
Feature detection помогает выбирать код по доступным механизмам. Проверка user-agent часто слишком груба: версии, оболочки и настройки различаются. Для CSS используют @supports, для JavaScript — проверку нужного свойства или метода с последующей обработкой результата операции.
.cards {
display: block;
}
.cards > * {
margin-block-end: 1rem;
}
@supports (display: grid) and (grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr))) {
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
gap: 1rem;
}
.cards > * {
margin-block-end: 0;
}
}
Это учебный пример принципа, а не рекомендация считать Grid новой технологией. Базовый список определён до улучшения, поэтому содержание сохраняется без него. min(16rem, 100%) ограничивает минимальную ширину колонки шириной контейнера; простое minmax(16rem, 1fr) могло бы переполнить более узкую область. Содержимое карточек, включая длинные неразрывные строки, всё равно требует отдельной проверки. Условие проверяет и display: grid, и используемое выражение колонок. Проверка только display: grid не означала бы автоматической поддержки всех подфункций сетки. Для другой новой возможности условие должно относиться именно к ней.
Наличие API — только начало
Проверка метода не отменяет обработку отказа. Пользователь может отклонить запрос разрешения, документ — находиться в неподходящем контексте, операция — завершиться ошибкой. Кнопка не должна сначала обещать успех, а потом молча исчезать. Разведите отсутствие возможности и неудачу конкретного выполнения: пользователю полезны разные объяснения и действия.
Отдельная ловушка — синтаксис JavaScript. Если старый браузер не может разобрать файл, проверка внутри этого файла не выполнится. Настройки сборки и преобразование синтаксиса решают одну часть совместимости; polyfill для отсутствующего API — другую. Нельзя предполагать, что транспиляция автоматически добавила все веб-возможности или что любая функция точно воспроизводится библиотекой.
Как тестировать резервный вариант
Проверяйте его как самостоятельный интерфейс. В учебном каталоге отключённое улучшение не должно менять порядок чтения, скрывать кнопку или делать карточки слишком широкими. Помимо ширины экрана проверьте длинные названия, увеличение текста и клавиатуру. Это отличается от общего теста адаптивности: здесь причина переключения — доступность механизма, а не размер окна.
Автоматические тесты в разных движках хорошо ловят регрессии, но не полностью заменяют целевые устройства и встроенные браузеры. Эмуляция мобильного размера в настольном окне не доказывает поведение реального мобильного браузера. Для критичного маршрута нужен хотя бы согласованный ручной прогон в тех средах, за которые команда отвечает.
Приёмочный набор для новой функции
- Проверить справочник конкретной возможности и примечания по целевой матрице.
- Пройти основной сценарий в поддерживающем браузере.
- Искусственно выбрать резервную ветку и проверить её полностью.
- Проверить отказ во время выполнения, если операция может завершиться ошибкой.
- Проверить загрузку итогового production-кода, а не только development-сборки.
- Сверить клавиатуру, чтение содержимого и сохранность данных в обоих вариантах.
Выпуск готов, когда для каждой поддерживаемой среды известен результат и нет скрытой зависимости от случайно доступной функции. После выпуска наблюдайте реальные ошибки и пересматривайте матрицу осознанно. Удаление fallback — такое же изменение поддержки, как добавление нового API, и требует собственного решения.
Официальные источники
Нужен план для вашего проекта? Напишите нам в Telegram или по электронной почте. Обсудим разработку, продвижение или поддержку сайта.


