Разработчики браузера Chrome приняли решение полностью заблокировать тяжёлую рекламу, которая потребляет слишком много вычислительных ресурсов на компьютере пользователя (трафик и CPU).
Вместо такой рекламы браузер будет показывать серые квадраты.
Новый механизм блокировки называется Heavy Ad Intervention. В технической документации сказано, что критерии «тяжёлой рекламы» ещё обсуждаются, но для начала предлагаются такие:
chrome://flags/#enable-heavy-ad-intervention
chrome://flags/#heavy-ad-privacy-mitigations
в значение Disabled. Это облегчит отладку и тестирование.#heavy-ad-privacy-migrations-opt-out
, который нужно активировать для тестирования.intervention
. Вы можете использовать Reporting API, чтобы получать уведомления о вмешательствах либо с помощью POST-запроса к конечной точке, либо в вашем JavaScript, сказано в документации для разработчиков.Report-To
:Report-To: { "url": "https://example.com/reports", "max_age": 86400 }
POST /reports HTTP/1.1
Host: example.com
…
Content-Type: application/report
[{
"type": "intervention",
"age": 60,
"url": "https://example.com/url/of/ad.html",
"body": {
"sourceFile": null,
"lineNumber": null,
"columnNumber": null,
"id": "HeavyAdIntervention",
"message": "Ad was removed because its CPU usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384"
}
}]
ReportingObserver
с методом observe()
, который можно использовать для запуска обратного вызова при блокировке. Это может быть полезно, если вы хотите прикрепить дополнительную информацию к отчёту, чтобы помочь в отладке.// callback that will handle intervention reports
function sendReports(reports) {
for (let report of reports) {
// Log the `report` json via your own reporting process
navigator.sendBeacon('https://report.example/your-endpoint', report);
}
}
// create the observer with the callback
const observer = new ReportingObserver(
(reports, observer) => {
sendReports(reports);
},
{ buffered: true }
);
// start watching for interventions
observer.observe();
unload
, советует документация.window.addEventListener('unload', (event) => {
// pull all pending reports from the queue
let reports = observer.takeRecords();
sendReports(reports);
});
POST
:[
{
type: 'intervention',
url: 'https://example.com/url/of/ad.html',
body: {
sourceFile: null,
lineNumber: null,
columnNumber: null,
id: 'HeavyAdIntervention',
message:
'Ad was removed because its network usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384',
},
},
];
К сожалению, не доступен сервер mySQL