ReportingObserver

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 .

Catching a deprecation reportHTMLLive
<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>

Forward them with navigator.sendBeacon() (Beacon). crash reports go only to a default endpoint in Reporting-Endpoints.