Притча про те, як робити не треба.
The Verge (Manhattan, NYC) is an American technology news/media network operated by Vox Media. Alexa rank (Sep 2018): 576.
На уйоб сайті theverge.com, якщо зайти 1й раз, коли cookies для їх домейну ще немає, вони показують чималенький банер "We use cookies..." зі кнопкою "I Accept."
Але, якщо у вас є блокувальник реклами, то після жмакання на зе кнопку, банер нікуди не подінеться, а на кнопці з'явиться безкінечний спінер.
Релевантні шматки onclick колбеку:
var pickup = document.querySelector('#phonograph-pickup');
pickup.async = true;
pickup.onload = addCallback(function() {
phonographEvents.push(['privacy_consent', {
token: token, geoip_continent: continentCode[1], callback: done
}]);
})
pickup.src = pickup.getAttribute('data-src');
Де #phonograph-pickup
це:
<script data-src="https://phonograph2.voxmedia.com/pickup.js?v=1529075019264"
id="phonograph-pickup"></script>
EasyPrivacy список має ||voxmedia.com/pickup.js
рядок, тому UO
блокує завантаження зе скрипта (який є на диво не obfuscated).
Зі зе сніпету є геть незрозумілим як вони намагаються банера
приховати, навіть якщо би заблокований скрипта
завантажився. phonographEvents
це є просто array, done
то є
посилання на хфункцію яка робить повний location.reload()
.
А намагаються вони зробити ось таке: pickup.js
створює таймер, який
безкінечно кожні 300 мс шкутильгає по phonographEvents
, щоб
зробити POST запит зі даними про бідосю-користувача та виконати,
нарешті, колбек done
:
while (phonographEvents.length) {
_this.send(phonographEvents.shift());
}
Як саме вони роблять POST запит, то є поезія. Ніякого fetch
або
XMLHttpRequest
--ні! Вони створюють iframe, куди динамічно пхають
хформу, на якій синтетично роблять submit.
Які дані користувача відсилаються?
buildQuery: function(event) {
var q = {};
q['d'] = (event.length > 1) ? JSON.stringify(event[1]) : "";
q['e'] = event[0];
q['uid'] = this.uuid;
q['suid'] = this.suid;
q['de'] = (document.characterSet || document.charset)
q['sr'] = window.screen.width + "x" + window.screen.height
q['vp'] = this.vpSize();
q['ul'] = ((window.navigator.language ||
window.navigator.browserLanguage) || "").toLowerCase();
q['sd'] = (window.screen && window.screen.colorDepth || "") + "-bit";
q['fl'] = this.flash();
q['je'] = this.java();
q['dl'] = document.location;
q['dr'] = document.referrer;
q['wh'] = window.location.hostname;
q['z'] = Math.round(Math.random() * 2147483647);
return q;
},
Менхетенські технології журналістики!
'In December 2014, Vox Media raised a $46.5 million round led by the growth equity firm General Atlantic, estimating the media company's value at around $380 million.
In August 2015, NBCUniversal made a $200 million equity investment in Vox Media, valuing the company at more than $1 billion'
(насправді, заздрю страшно)