diff options
author | Pierre Ossman <ossman@cendio.se> | 2017-01-18 15:59:31 +0100 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2017-01-18 15:59:31 +0100 |
commit | 413ea87741309c04ccbd8cdb2dfb4d33a1254737 (patch) | |
tree | 6cf20fc3fc7f341d79b290ef95a47c2e948b508e | |
parent | 1ec1c512af97204c8c81ba6e741ae6706f30e63d (diff) | |
download | novnc-413ea87741309c04ccbd8cdb2dfb4d33a1254737.tar.gz |
Fix global error handler
It stopped working when we switched to textContent as it relies
on being able to add new HTML elements. Do things properly by
adding new elements via createElement().
-rw-r--r-- | app/ui.js | 32 |
1 files changed, 20 insertions, 12 deletions
@@ -28,27 +28,35 @@ var UI; // Fallback for all uncought errors window.addEventListener('error', function(event) { try { - var msg = ""; + var msg, div, text; - msg += "<div>"; - msg += event.message; - msg += "</div>"; + msg = document.getElementById('noVNC_fallback_errormsg'); - msg += " <div class=\"noVNC_location\">"; - msg += event.filename; - msg += ":" + event.lineno + ":" + event.colno; - msg += "</div>"; + // Only show the initial error + if (msg.hasChildNodes()) { + return false; + } + + div = document.createElement("div"); + div.appendChild(document.createTextNode(event.message)); + msg.appendChild(div); + + div = document.createElement("div"); + div.className = 'noVNC_location'; + text = event.filename + ":" + event.lineno + ":" + event.colno; + div.appendChild(document.createTextNode(text)); + msg.appendChild(div); if ((event.error !== undefined) && (event.error.stack !== undefined)) { - msg += "<div class=\"noVNC_stack\">"; - msg += event.error.stack; - msg += "</div>"; + div = document.createElement("div"); + div.className = 'noVNC_stack'; + div.appendChild(document.createTextNode(event.error.stack)); + msg.appendChild(div); } document.getElementById('noVNC_fallback_error') .classList.add("noVNC_open"); - document.getElementById('noVNC_fallback_errormsg').textContent = msg; } catch (exc) { document.write("noVNC encountered an error."); } |