error-handler.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // NB: this should *not* be included as a module until we have
  2. // native support in the browsers, so that our error handler
  3. // can catch script-loading errors.
  4. (function(){
  5. "use strict";
  6. // Fallback for all uncought errors
  7. function handleError (event, err) {
  8. try {
  9. var msg = document.getElementById('noVNC_fallback_errormsg');
  10. // Only show the initial error
  11. if (msg.hasChildNodes()) {
  12. return false;
  13. }
  14. var div = document.createElement("div");
  15. div.classList.add('noVNC_message');
  16. div.appendChild(document.createTextNode(event.message));
  17. msg.appendChild(div);
  18. if (event.filename) {
  19. div = document.createElement("div");
  20. div.className = 'noVNC_location';
  21. var text = event.filename;
  22. if (event.lineno !== undefined) {
  23. text += ":" + event.lineno;
  24. if (event.colno !== undefined) {
  25. text += ":" + event.colno;
  26. }
  27. }
  28. div.appendChild(document.createTextNode(text));
  29. msg.appendChild(div);
  30. }
  31. if (err && (err.stack !== undefined)) {
  32. div = document.createElement("div");
  33. div.className = 'noVNC_stack';
  34. div.appendChild(document.createTextNode(err.stack));
  35. msg.appendChild(div);
  36. }
  37. document.getElementById('noVNC_fallback_error')
  38. .classList.add("noVNC_open");
  39. } catch (exc) {
  40. document.write("noVNC encountered an error.");
  41. }
  42. // Don't return true since this would prevent the error
  43. // from being printed to the browser console.
  44. return false;
  45. }
  46. window.addEventListener('error', function (evt) { handleError(evt, evt.error); });
  47. window.addEventListener('unhandledrejection', function (evt) { handleError(evt.reason, evt.reason); });
  48. })();