diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.js index 130c7dc8a..006f0b8d5 100644 --- a/src/static/js/pad_utils.js +++ b/src/static/js/pad_utils.js @@ -474,11 +474,22 @@ var padutils = { } }; -var globalExceptionHandler = undefined; -function setupGlobalExceptionHandler() { - if (!globalExceptionHandler) { - globalExceptionHandler = function test (msg, url, linenumber) - { +let globalExceptionHandler = null; +padutils.setupGlobalExceptionHandler = () => { + if (globalExceptionHandler == null) { + globalExceptionHandler = (e) => { + let type; + let msg, url, lineno; + if (e instanceof ErrorEvent) { + type = 'Uncaught exception'; + ({message: msg, filename: url, lineno: linenumber} = e); + } else if (e instanceof PromiseRejectionEvent) { + type = 'Unhandled Promise rejection'; + const err = e.reason || {}; + ({message: msg = 'unknown', fileName: url = 'unknown', lineNumber: linenumber = -1} = err); + } else { + throw new Error(`unknown event: ${e.toString()}`); + } var errorId = randomString(20); var msgAlreadyVisible = false; @@ -497,6 +508,7 @@ function setupGlobalExceptionHandler() { .text('If the problem persists, please send this error message to your webmaster:'), $('