WebSocket (WebSocket and WebSocketStream) fires open, message, error and close; workers fire message and error; IndexedDB requests (IndexedDB) fire success, error and upgradeneeded; an AbortSignal fires abort. Uncaught exceptions and promise rejections reach window as error and unhandledrejection.
<pre style="margin:0"></pre>
<script>
const log = (text) => document.querySelector("pre").append(text + "\n");
const ctrl = new AbortController();
ctrl.signal.onabort = (e) => log(`abort: ${e.target.reason}`);
onunhandledrejection = (e) => { log(`rejection: ${e.reason.message}`); e.preventDefault(); };
ctrl.abort("user left");
Promise.reject(new Error("fetch failed")); // preventDefault() above keeps the console clean
</script>
Forward both global events to your error tracker, or uncaught failures reach only the user's console.