Заметка про Client Hints API
Переходили на это API на сервере, с фаллбэком на парсинг User-Agent через
ua-parser-js, как было раньше.На сервере это HTTP заголовок
sec-ch-ua который легко разобрать.Также недавно интегрировали на клиенте, там данные доступны в
navigator.userAgentData.Про саму апишку писать не буду, главное что это должно упрощять и ускорять определение браузера и устройства, есть свои нюансы с тем что бы получить подробные данные, но это наше будущее.
Столкнулся с проблемой мокирования User-Agent и взаимодействия с этой апишкой в следующих кейсах:
- в Chrome Devtools при эмуляции мобильных устройств
- в Playwright при использовании кастомного User-Agent
Проблема следующая -
navigator.userAgentData не синхронизируется с navigator.userAgent:- для устройств с Chrome и Android, где поддержка Client Hints есть, пишет реальную версию текущего браузера, хотя в UA условно 80й хром
- для IOS + Safari - вместо
undefined, как должно быть если апишка не поддержкивается, возвращает бесполезный объект с пустым массивом brands и пустой строкой в platformПример проблемы - https://github.com/microsoft/playwright/issues/14361
Такая вот не приятная особенность, усложняет и внедрение использования этой апишки в приложение с существующими тестами, и локальную проверку в браузере, решается только мокированием или использованием реального браузера.
Надеюсь будет полезно!