Как Google Ads контент прячут
Для очередной презентации пришлось сделать очередной мем на meme-arsenal.com (на правах антирекламы)
Захожу, делаю, всё как обычно. Но вот на странице с получившейся картинкой она появляется буквально на долю секунды и пропадает! Может что-то по части JS отвалилось или что-то не смогло скачаться?
Иду в DevTools и вижу единственный лог-зацепку "switchToRussian".
Вряд ли разработчики делают локализацию на стороне клиента и для каждого языка вставляют свой лог, решаю покопать глубже.
Функция, в которой случайно оставили этот лог, просто проставляет флажок isRussian и втыкает Яндекс Метрику. Используется этот проставленный флажок только в одном месте:
Это транспайленный код Angular-приложения, который сложно понять, если раньше подобное не приходилось дебажить. На самом деле этот кусок кода получается из директивы ngIf, которая скрывает или показывает код по заданному условию. Условием показа в данном случае как раз является отсутствие флажка isRussian. Понятно, в России запретили мемы.
Почему-то я решил копнуть чуть поглубже и посмотреть, как они определяют то, что я из России. Способ довольно интересный и я даже проспойлерил его в заголовке. Сначала они просто смотрят на то, доступно ли взаимодействие с Google Ads.
У меня оно было недоступно потому что Ad Block просто блокировал гугловые скрипты. Отключил его, но мем не появился. Копаю глубже, в функцию checkGoogle
И вот оно, "чудо враждебной техники"! Функция, которая 12 раз проверит, занялось ли место под гугловую рекламу, прогрузилась ли она.
На рекламных элементах гугла при полной загрузке проставляется атрибут data-ad-status="filled", а у меня там будет unfilled — в России реклама не прогрузится никогда.
Получается, что контент скрывали не столько от русских, сколько от людей, которым они не показывают рекламу. Как говорится, не доставайся же ты никому.
А вместо заключения хочу показать, что несмотря на такой хитрый способ, картинка всё равно создается и даже отдается в браузер: найти её можно открыв вкладку Network в Devtools (их можно открыть нажатием F12) и отфильтровав запросы по картинкам
Кстати, никаких логических объяснений именно двенадцати проверок я не нашел, скорее всего, ребята получили это число экспериментальным путём.