Профиль с платформой Android собирается на обычном компьютере и проходит iphey с вердиктом Trustworthy. Главное правило выяснилось дорого: железо телефону задавать нельзя. И один предел, который в настольном окне не обойти.
Мобильный профиль создается флагом:
Движок сам выбирает согласованную мобильную персону: модель, чип, экран, память. Модель устройства объявляется в uaData.model, откуда ее и читают детекторы. Стенд дает 100 из 100, iphey отвечает Trustworthy, физический телефон не нужен.
Первая версия задавала телефону железо снаружи, из собственного списка моделей. Список поставил на Pixel 7 чип от Redmi. Одного неверного чипа хватило, чтобы iphey увел вердикт в Unreliable: связку «модель плюс чип» детекторы знают лучше, чем любой рукописный справочник.
Три мобильных профиля подряд на свежей машине:
| Поверхность | Результат |
|---|---|
| Шрифты Windows | не видны, ни одного из тринадцати проверенных |
| Видеокарта | своя у каждого |
| Экран | свой у каждого |
| Canvas | свой у каждого |
| Число ядер | восемь у всех, как на настоящих телефонах |
Про шрифты это главное. Если бы страница, которой представились Pixel, увидела Calibri и Segoe UI, это был бы мгновенный провал: таких шрифтов на Android не бывает. Проверено списком из тринадцати шрифтов, которые ставятся только с Windows и Microsoft Office. Не видно ни одного.
Область просмотра у мобильного профиля шире объявленного экрана. Движок подменяет screen и outerWidth, но окно остается настоящим окном настольной системы. Профиль объявляет 360×800, а область просмотра выходит 500×731. Что перепробовано:
| Попытка | Ширина области просмотра |
|---|---|
| без вмешательства | 500 |
| окно 412×915 | 500 |
| окно 300×600 | 500 |
| масштаб отрисовки 1,27 | 510 |
| безголовый режим | 478 |
Упирается в минимальную ширину окна Chrome на настольной системе, около 500 css. Телефонов такой ширины не бывает, поэтому расхождение по ширине неустранимо, пока браузер живет в настольном окне. Подменить innerWidth в обход раскладки нельзя: страница получит настоящую ширину первым же медиазапросом, и вместо одного расхождения станет два.
Что все же сделано: после запуска окно приводится к высоте, которую объявила сама страница, и CreepJS перестал подсвечивать секцию Screen. Остаток по ширине показан в панели: ячейка ОКН потушена, под таблицей объяснение. Скрывать бессмысленно: сайт видит расхождение раньше клиента.
Согласованность важнее количества · Как детекторы связывают профили