← На главную

Chrome 151 внедрил `<usermedia>` — декларативный доступ к медиа

01.07.2026 23:56 · hackernews

В Chrome 151 появился новый HTML-элемент <usermedia>. Это следующий шаг в наборе Capability Elements после недавнего <geolocation>. Элемент заменяет скриптовые запросы на доступ к камере и микрофону декларативным и физическим взаимодействием — пользователь должен нажать на кнопку, контролируемую браузером. Это резко упрощает код, повышает безопасность и решает давнюю проблему «permission hole», когда случайно заблокированный доступ можно восстановить только через глубокие настройки браузера.

Раньше разработчикам приходилось вызывать getUserMedia(), ловить ошибки состояния и молиться, чтобы браузер не подавил запрос как автоматический спам. <usermedia> управляет всем потоком: ловит намерение пользователя, показывает промпт, выдаёт готовый объект MediaStream. Весь код настройки сводится к вызову setConstraints() и обработке событий stream, error и cancel.

Эксперимент с Origin Trial подтвердил эффективность. Cisco замерила: после того как пользователь изначально отказал в доступе, классические промпты давали лишь около 10% успешных повторных разрешений, а новый элемент — более 65%. Zoom зафиксировал снижение ошибок захвата камеры или микрофона на 46,9% — элемент проводит пользователя через восстановление доступа, даже если проблема на системном уровне. У Google Meet количество жалоб «микрофон не работает» упало на 17%, а успешное восстановление доступа для ранее отказавшихся выросло на 131%.

К элементу применяются жёсткие стилистические ограничения: необходим контраст текста не ниже 3:1, запрещена прозрачность и отрицательные отступы, поддерживаются только 2D-трансляции и пропорциональное масштабирование. Есть псевдокласс :granted, который активируется при получении потока.

Для браузеров без поддержки <usermedia> можно сделать graceful degradation: элемент упадёт до HTMLUnknownElement, а его содержимое (например, обычная кнопка) останется рабочим. Миграция с экспериментального <permission> элемента минимальна: достаточно заменить тег и обновить названия классов в коде.

В планах — отдельные элементы <camera> и <microphone> для более узких сценариев с видео или аудио по отдельности.

Читать оригинал →