Блог
Ваш профиль выдаёт себя размером окна раньше, чем отпечатком
Команда ARMANOS6 мин
Площадка находит это одной строкой
Любая страница читает экран, который объявляет ваш браузер, и окно, сквозь которое она видна. Оба значения обычные, и разрешения площадка не спрашивает.
На странице, объявившей себя мобильной, окно шире экрана описывает машину, которой не бывает. Без этой строки настоящий телефон тоже раскладывается шире своего экрана, поэтому площадка судит только после неё.
- 1
Спрашивает экран
Ширина и высота экрана, о котором сообщает браузер.
- 2
Спрашивает окно
Ширина и высота области, в которой нарисована страница.
- 3
Сравнивает
Окно больше экрана это противоречие внутри одного браузера.
Какие экраны достаются профилям
Экран достаётся вашему профилю из его зерна, и на 900 настольных профилях текущего поколения отпечатка набор выглядит так.
Разных экранов восемнадцать, от 1280 на 720 до 3840 на 2160. Этот разброс работает на вас: набор из одного размера был бы приметой сам по себе, и площадка узнавала бы такие профили по одной строке.
| Замерено на 900 профилях | Доля |
|---|---|
| Экранов уже или ниже, чем 1920 на 1080 | около 6 из 10 |
| Экранов ниже окна в 820 точек | 16 процентов |
| Разных экранов в наборе | 18 |
| Самый узкий и самый широкий | 1280 на 720 и 3840 на 2160 |
Почему расхождение так часто
Вы работаете на своём мониторе, а распространённый это 1920 на 1080. Развёрнутое окно займёт этот размер независимо от того, что объявляет профиль внутри.
Значит расходятся ровно те профили, чей экран меньше монитора перед вами. На большем мониторе таких больше, на меньшем меньше, и от ваших настроек это не зависит.
На телефоне это видно сразу
У телефонного профиля разрыв не спрятать: аппарат объявляет 360 точек в ширину, а растянутое рукой окно было бы втрое больше.
Поэтому телефонный профиль открывается окном в аппарат, и запомненный размер не возвращается. Человек может передвинуть такое окно по монитору куда угодно, а растянуть его шире аппарата уже нет. Настольный случай это то же противоречие меньшими числами.
Каким открывается окно вашего профиля
Ваше окно открывается не шире экрана, который объявляет профиль. Меньшее окно остаётся меньшим: объявленный экран это потолок, а не требование.
Потолок держит внешний размер окна, а страница читает внутреннюю область, которая всегда меньше. Запас в вашу пользу.
- 1
Одно правило на все окна
Любое окно профиля открывается по одному и тому же правилу.
- 2
Объявленное это потолок
Ширина и высота не уходят выше экрана, о котором профиль сообщает.
- 3
У телефона точно
Окно аппарата равно экрану аппарата, а не просто помещается в него.
Автопроверка отпечатка об этом молчит
В программе есть «Автопроверка отпечатка» (меню профиля > Проверить отпечаток): она открывает страницу и построчно сверяет, что браузер отвечает то, что велено. Строка про окно в ней тоже есть.
Но у настольного профиля эта строка не выполняется. Она собрана вместе с телефонными, рядом с касаниями и поворотом экрана, и на настольном отпечатке весь этот набор пропускается.
Поэтому человек видит отчёт, где сошлось всё, и не знает про расхождение. Пока строка не переедет к общим, проверять окно надо глазами.
Почему потолок, а не совет
Совет тут не работает: размер окна человек меняет мышью каждый день и о цифрах в это время не думает. Расхождение при этом появляется от одного движения к краю экрана.
Поэтому окно профиля не открывается шире объявленного экрана. Меньше можно, больше нет: объявленный экран это потолок, и он держится сам.
Что это меняет для двух профилей на одной машине
Два профиля на одном мониторе получают свои объявленные экраны, и чаще всего разные: на двух тысячах пар они совпали в двенадцати случаях из ста. Разная ширина развёрнутых окон это не поломка, а ровно то, ради чего профили и заводят.
Одинаковая ширина у двух окон сказала бы площадке больше, чем разная. Одинаковые размеры читаются как одна машина, а не как две.
Чем больше ваш монитор, тем чаще расхождение
Развёрнутое окно занимает ширину вашего монитора, а объявленный экран профиля от монитора не зависит. Значит расходятся те профили, чей объявленный экран уже вашего.
На девятистах жребиях это выглядит так: при мониторе 1366 расходится примерно каждый двенадцатый профиль, при 1920 шесть из десяти, при 2560 почти восемь, а при 3840 почти все.
Отсюда простое следствие: человек с большим монитором рискует сильнее, хотя ничего особенного не делает.
| Ваш монитор по ширине | Профилей с экраном уже |
|---|---|
| 1366 | 8 из 100 |
| 1536 | 33 из 100 |
| 1920 | 62 из 100 |
| 2560 | 78 из 100 |
| 3840 | 96 из 100 |
Что делать с уже заведёнными профилями
Потолок работает при открытии окна, поэтому старые профили он тоже подхватывает: их запомненный размер срезается по объявленному экрану при следующем запуске.
Отдельно ничего переносить не нужно. Если окно было меньше объявленного экрана, оно таким и останется: потолок не растягивает.
Высота подводит раньше ширины
Окно профиля открывается высотой в восемьсот двадцать точек. У экранов 1280 на 720 и 1280 на 800 объявленная высота меньше этого числа.
Значит у таких профилей окно выше объявленного экрана ещё до того, как человек потянул его мышью. Потолок срезает и высоту, не только ширину.
Почему нельзя просто объявить экран побольше
Соблазн есть: дать каждому профилю 3840 на 2160, и окно никогда не выйдет за край. Так набор экранов стал бы приметой сам по себе.
Восемнадцать видов с разными долями похожи на то, что площадка видит у обычных людей. Один размер на всех она заметила бы быстрее, чем расхождение.
Откуда взялись эти числа
Все доли в этой записи посчитаны одним способом: берётся девятьсот профилей трёх настольных видов текущего поколения отпечатка, у каждого читается объявленная ширина экрана, и считается, у скольких она меньше выбранного монитора.
Повторить это можно у себя: числа выводятся из того же кода, который собирает отпечаток профилю, а не берутся из таблицы, написанной рукой. Мы пересчитали их тремя разными наборами имён профилей, и доля вышла от пятидесяти девяти до шестидесяти трёх процентов при мониторе 1920.
Поэтому в тексте стоит «примерно шесть из десяти», а не одно точное число. Точное число тут означало бы одну выборку, выданную за свойство, и мы это уже проходили.
Как проверить у себя
Откройте в браузере окно разработчика и прочитайте экран и окно рядом. Сравнение занимает одну строку и ничего ставить не нужно: ширина экрана рядом с внутренней шириной окна, и второе обязано быть не больше первого.
Сделайте это на развёрнутом окне и на маленьком. Честно отвечающий профиль в обоих случаях даёт окно не больше экрана. Если на развёрнутом окне число окна оказалось больше, профиль объявляет машину, которой у вас нет.
Чего это не утверждает
- Это не утверждает, что сошедшиеся размеры делают профиль безопасным. Убрано одно противоречие из многих, а поведение, платёжные данные и история аккаунта остаются нетронутыми любым браузером.
- Это не утверждает, что такую проверку делает каждый сайт. Кто-то делает, кто-то не смотрит вовсе, и никто из них не публикует, что именно проверяет.
- Самопроверка внутри программы делает это сравнение у профиля с касаниями, а не у настольного. Распространение её на настольный меняет число строк, о котором программа сообщает, и потому ждёт следующей приёмки на собранном движке.
- Числа выше описывают наш набор экранов на поколении, текущем сегодня. Другой набор даёт другие доли.
Где это можно увидеть самому
Каждое число выше выходит из кода, который можно открыть и запустить.
- Экраны выводятся из зерна профиля
- packages/shared/src/index.js
- Размер окна профиля решается в одном месте
- apps/desktop/src/lib/окноПрофиля.js
- Правило исполняется на настоящих отпечатках, а не читается буквами
- apps/desktop/test/окно-не-шире-экрана.js
- Телефонное окно делается размером с аппарат
- apps/desktop/src/lib/mobileEmulation.js · apps/desktop/src/lib/mobileWindow.js
Вопросы
- Почему не выдать всем самый большой экран?
- Один размер на всех это примета сам по себе, а экран, далёкий от машин, которые площадка обычно видит, выделяется и в одиночку.
- Вы теряете выбранный размер окна?
- Только ту часть, что выше объявленного экрана. Окно меньше экрана открывается ровно таким, каким вы его оставили.
- Это про полноэкранный режим?
- Нет. В полноэкранном окно равно экрану, а противоречие появляется, только когда окно больше объявленного профилем.
- Сайт видит, как числа были срезаны?
- Он читает два обычных значения и не видит, чем они получены. Видит он другое: сходятся они или нет.
- Меняет ли что-нибудь прокси?
- Нет. Адрес приходит со стороны, а оба этих числа рождаются на машине перед вами.
Рядом с этим
Посмотрите, что отвечает ваш браузер
Проверка читает 12 значений и никуда их не отправляет.