diff options
author | Pierre Ossman <ossman@cendio.se> | 2021-11-22 14:03:19 +0100 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2021-11-22 14:03:59 +0100 |
commit | c143a852b15b2128c879f2471b5c9b7ee22805e8 (patch) | |
tree | 1be54f47c7e56844ae56fb1b82d9c4e059577594 | |
parent | 2f602da96145f02b7765916ac8abfb5022097c29 (diff) | |
download | novnc-c143a852b15b2128c879f2471b5c9b7ee22805e8.tar.gz |
Convert error handler to ES6 module
We no longer support older browsers, so this is not allowed to use
modern features.
-rw-r--r-- | app/error-handler.js | 104 | ||||
-rw-r--r-- | vnc.html | 2 |
2 files changed, 48 insertions, 58 deletions
diff --git a/app/error-handler.js b/app/error-handler.js index f956c22..e9ce68e 100644 --- a/app/error-handler.js +++ b/app/error-handler.js @@ -6,67 +6,57 @@ * See README.md for usage and integration instructions. */ -// NB: this should *not* be included as a module until we have -// native support in the browsers, so that our error handler -// can catch script-loading errors. - -// No ES6 can be used in this file since it's used for the translation -/* eslint-disable prefer-arrow-callback */ - -(function _scope() { - "use strict"; - - // Fallback for all uncought errors - function handleError(event, err) { - try { - const msg = document.getElementById('noVNC_fallback_errormsg'); - - // Work around Firefox bug: - // https://bugzilla.mozilla.org/show_bug.cgi?id=1685038 - if (event.message === "ResizeObserver loop completed with undelivered notifications.") { - return false; - } - - // Only show the initial error - if (msg.hasChildNodes()) { - return false; - } +// Fallback for all uncought errors +function handleError(event, err) { + try { + const msg = document.getElementById('noVNC_fallback_errormsg'); + + // Work around Firefox bug: + // https://bugzilla.mozilla.org/show_bug.cgi?id=1685038 + if (event.message === "ResizeObserver loop completed with undelivered notifications.") { + return false; + } - let div = document.createElement("div"); - div.classList.add('noVNC_message'); - div.appendChild(document.createTextNode(event.message)); - msg.appendChild(div); + // Only show the initial error + if (msg.hasChildNodes()) { + return false; + } - if (event.filename) { - div = document.createElement("div"); - div.className = 'noVNC_location'; - let text = event.filename; - if (event.lineno !== undefined) { - text += ":" + event.lineno; - if (event.colno !== undefined) { - text += ":" + event.colno; - } + let div = document.createElement("div"); + div.classList.add('noVNC_message'); + div.appendChild(document.createTextNode(event.message)); + msg.appendChild(div); + + if (event.filename) { + div = document.createElement("div"); + div.className = 'noVNC_location'; + let text = event.filename; + if (event.lineno !== undefined) { + text += ":" + event.lineno; + if (event.colno !== undefined) { + text += ":" + event.colno; } - div.appendChild(document.createTextNode(text)); - msg.appendChild(div); - } - - if (err && err.stack) { - div = document.createElement("div"); - div.className = 'noVNC_stack'; - div.appendChild(document.createTextNode(err.stack)); - msg.appendChild(div); } + div.appendChild(document.createTextNode(text)); + msg.appendChild(div); + } - document.getElementById('noVNC_fallback_error') - .classList.add("noVNC_open"); - } catch (exc) { - document.write("noVNC encountered an error."); + if (err && err.stack) { + div = document.createElement("div"); + div.className = 'noVNC_stack'; + div.appendChild(document.createTextNode(err.stack)); + msg.appendChild(div); } - // Don't return true since this would prevent the error - // from being printed to the browser console. - return false; + + document.getElementById('noVNC_fallback_error') + .classList.add("noVNC_open"); + } catch (exc) { + document.write("noVNC encountered an error."); } - window.addEventListener('error', function onerror(evt) { handleError(evt, evt.error); }); - window.addEventListener('unhandledrejection', function onreject(evt) { handleError(evt.reason, evt.reason); }); -})(); + // Don't return true since this would prevent the error + // from being printed to the browser console. + return false; +} + +window.addEventListener('error', evt => handleError(evt, evt.error)); +window.addEventListener('unhandledrejection', evt => handleError(evt.reason, evt.reason)); @@ -55,7 +55,7 @@ <link rel="preload" as="image" href="app/images/error.svg"> <link rel="preload" as="image" href="app/images/warning.svg"> - <script src="app/error-handler.js"></script> + <script type="module" crossorigin="anonymous" src="app/error-handler.js"></script> <script type="module" crossorigin="anonymous" src="app/ui.js"></script> </head> |