-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Expand file tree
/
Copy pathbasic_error_handler.ts
More file actions
49 lines (41 loc) · 1.87 KB
/
Copy pathbasic_error_handler.ts
File metadata and controls
49 lines (41 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// @ts-nocheck
// @license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7&dn=apache-2.0.txt Apache-2.0
/* Copyright 2021 Richard Hansen <rhansen@rhansen.org> */
'use strict';
// Set up an error handler to display errors that happen during page load. This handler will be
// overridden with a nicer handler by setupGlobalExceptionHandler() in pad_utils.js.
(() => {
const originalHandler = window.onerror;
window.onerror = (...args) => {
const [msg, url, line, col, err] = args;
// Purge the existing HTML and styles for a consistent view.
document.body.textContent = '';
for (const el of document.querySelectorAll('head style, head link[rel="stylesheet"]')) {
el.remove();
}
const box = document.body;
box.textContent = '';
const summary = document.createElement('p');
box.appendChild(summary);
summary.appendChild(document.createTextNode('An error occurred while loading the page:'));
const msgBlock = document.createElement('blockquote');
box.appendChild(msgBlock);
msgBlock.style.fontWeight = 'bold';
msgBlock.appendChild(document.createTextNode(msg));
const loc = document.createElement('p');
box.appendChild(loc);
loc.appendChild(document.createTextNode(`in ${url}`));
loc.appendChild(document.createElement('br'));
loc.appendChild(document.createTextNode(`at line ${line}:${col}`));
const stackSummary = document.createElement('p');
box.appendChild(stackSummary);
stackSummary.appendChild(document.createTextNode('Stack trace:'));
const stackBlock = document.createElement('blockquote');
box.appendChild(stackBlock);
const stack = document.createElement('pre');
stackBlock.appendChild(stack);
stack.appendChild(document.createTextNode(err.stack || err.toString()));
if (typeof originalHandler === 'function') originalHandler(...args);
};
})();
// @license-end