Deprecation and intervention warnings (the browser blocking a heavy ad, say) normally reach only DevTools, and often occur only on users' devices. ReportingObserver (Baseline since March 2026) passes them to your code; buffered: true adds earlier reports. These two report types are still mostly Chromium 4,389 .
<script>
new ReportingObserver((reports) => reports.forEach(({ type, body }) => {
console.log(`${type}: ${body.id}\n "${body.message.slice(0, 62)}..."`);
}), { types: ['deprecation', 'intervention'], buffered: true }).observe();
const xhr = new XMLHttpRequest();
xhr.open('GET', location.href, false); // synchronous XHR on the main thread is deprecated
xhr.send();
</script>deprecation: XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload "Synchronous `XMLHttpRequest` on the main thread is deprecated ..."
Forward them with navigator.sendBeacon() (Beacon). crash reports go only to a default endpoint in Reporting-Endpoints.