(event, err)
| 8 | |
| 9 | // Fallback for all uncought errors |
| 10 | function handleError(event, err) { |
| 11 | try { |
| 12 | const msg = document.getElementById('noVNC_fallback_errormsg'); |
| 13 | |
| 14 | // Work around Firefox bug: |
| 15 | // https://bugzilla.mozilla.org/show_bug.cgi?id=1685038 |
| 16 | if (event.message === "ResizeObserver loop completed with undelivered notifications.") { |
| 17 | return false; |
| 18 | } |
| 19 | |
| 20 | // Only show the initial error |
| 21 | if (msg.hasChildNodes()) { |
| 22 | return false; |
| 23 | } |
| 24 | |
| 25 | let div = document.createElement("div"); |
| 26 | div.classList.add('noVNC_message'); |
| 27 | div.appendChild(document.createTextNode(event.message)); |
| 28 | msg.appendChild(div); |
| 29 | |
| 30 | if (event.filename) { |
| 31 | div = document.createElement("div"); |
| 32 | div.className = 'noVNC_location'; |
| 33 | let text = event.filename; |
| 34 | if (event.lineno !== undefined) { |
| 35 | text += ":" + event.lineno; |
| 36 | if (event.colno !== undefined) { |
| 37 | text += ":" + event.colno; |
| 38 | } |
| 39 | } |
| 40 | div.appendChild(document.createTextNode(text)); |
| 41 | msg.appendChild(div); |
| 42 | } |
| 43 | |
| 44 | if (err && err.stack) { |
| 45 | div = document.createElement("div"); |
| 46 | div.className = 'noVNC_stack'; |
| 47 | div.appendChild(document.createTextNode(err.stack)); |
| 48 | msg.appendChild(div); |
| 49 | } |
| 50 | |
| 51 | document.getElementById('noVNC_fallback_error') |
| 52 | .classList.add("noVNC_open"); |
| 53 | |
| 54 | } catch (exc) { |
| 55 | document.write("noVNC encountered an error."); |
| 56 | } |
| 57 | |
| 58 | // Try to disable keyboard interaction, best effort |
| 59 | try { |
| 60 | // Remove focus from the currently focused element in order to |
| 61 | // prevent keyboard interaction from continuing |
| 62 | if (document.activeElement) { document.activeElement.blur(); } |
| 63 | |
| 64 | // Don't let any element be focusable when showing the error |
| 65 | let keyboardFocusable = 'a[href], button, input, textarea, select, details, [tabindex]'; |
| 66 | document.querySelectorAll(keyboardFocusable).forEach((elem) => { |
| 67 | elem.setAttribute("tabindex", "-1"); |
no test coverage detected