diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index 5aed9600d587d53ebcb8f12cc133b1d5f55441e5..0000000000000000000000000000000000000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/src/designviewer.cpp b/src/designviewer.cpp
index 228ed446042a8f48b9646ac6f4b944e4b7bb6586..faf436447de08c51cbec5b30ad59befd5f3eb7f2 100644
--- a/src/designviewer.cpp
+++ b/src/designviewer.cpp
@@ -46,18 +46,6 @@
 #include <QtGui/private/qzipreader_p.h>
 #endif
 
-std::function<void(char *, size_t, char *)> g_setFileDataCallback;
-extern "C" EMSCRIPTEN_KEEPALIVE void qt_callSetFileData(char *content,
-                                                        size_t contentSize,
-                                                        char *fileName)
-{
-    if (g_setFileDataCallback == nullptr)
-        return;
-
-    g_setFileDataCallback(content, contentSize, fileName);
-    g_setFileDataCallback = nullptr;
-}
-
 DesignViewer::DesignViewer()
 {
     qDebug() << "DesignViewer constructor";
diff --git a/src/main.cpp b/src/main.cpp
index 541e4e20f3d89119f872876a005c957faf02e2ff..4d8e4f9f42226811503b46bc8275db69c2d31f8d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -27,11 +27,13 @@
 #include <QSurfaceFormat>
 #include <QtQuick3D/QQuick3D>
 
+#include <emscripten.h>
+
 #include "designviewer.h"
 
 void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
 {
-    QString logPrefix, logSuffix, newLog;
+    QString logPrefix, logSuffix, newLog, jsCode;
     FILE *logFile = stdout;
 
     QByteArray localMsg = msg.toLocal8Bit();
@@ -52,6 +54,8 @@ void messageHandler(QtMsgType type, const QMessageLogContext &context, const QSt
     case QtCriticalMsg:
         logPrefix = QStringLiteral("Critical: ");
         logFile = stderr;
+        jsCode = QStringLiteral("logError('%1');").arg(localMsg.constData());
+        emscripten_run_script(jsCode.toStdString().c_str());
         break;
     case QtFatalMsg:
         logPrefix = QStringLiteral("Fatal: ");
diff --git a/www/index.html b/www/index.html
index 87e83e18a9a4b8b0ebd4695790e4ce8f4de8b521..ea7a1ad3ce720c55117b3e0146517975ff87b0b4 100644
--- a/www/index.html
+++ b/www/index.html
@@ -66,6 +66,8 @@
         <div id="title">Qt Design Viewer</div>
         <div id="subtitle" class="subtitleclass"></div>
         <div id="qtstatus"></div>
+        <div id="qterrormessages"></div>
+        <div id="qtbugreport"></div>
         <noscript
           >JavaScript is disabled. Please enable JavaScript to use this
           application.</noscript
@@ -164,6 +166,15 @@
       </p>
       <p id="versioninfo_main">Version: 1.0.0</p>
     </div>
+
+    <div id="err_user_feedback">
+      <span
+        class="closebtn"
+        onclick="this.parentElement.style.display='none';"
+        >&times;</span
+      >
+      <div id="err_user_feedback_text"></div>
+    </div>
     <script src="qtdesignviewer.js"></script>
     <script src="scripts/script.js" type="text/javascript"></script>
     <script src="qtloader.js" type="text/javascript"></script>
diff --git a/www/scripts/script.js b/www/scripts/script.js
index 5ebe8163fb5aef0ac7a92209e71b6b1084ad3c84..dd45283f87d3e7cae24084f37b15e172d1ff8717 100644
--- a/www/scripts/script.js
+++ b/www/scripts/script.js
@@ -65,11 +65,35 @@ window.addEventListener(
 );
 
 function logError(error) {
-    console.error(error);
-    console.error(error.stack);
+    const spinner = document.querySelector("#qtspinner");
+    const container = document.querySelector('#qtcontainer');
     const status = document.querySelector('#qtstatus');
-    status.innerHTML = 'An error occurred while running the project.<br><br>Error Message:<br>' + error + ' <br><br>Please check the logs for more information.<br>Reloading in 10 seconds.';
-    setTimeout(() => location.reload(), 10000);
+    const error_message = document.querySelector('#qterrormessages');
+    const bugreport = document.querySelector('#qtbugreport');
+
+    container.style.display = 'none';
+    spinner.style.display = 'block';
+    status.style.display = 'block';
+    error_message.style.display = 'block';
+    bugreport.style.display = 'block';
+
+    status.innerHTML = 'An error occurred while running the project. Please check the console logs for more information.<br><br>Critical Error Message(s):<br>';
+
+    var bugreport_text;
+
+    if (error instanceof Error) { // Assume it's a JS error
+        console.log(error.stack);
+        error_message.innerHTML += error.message + '<br>';
+    } else { // Assume it's a string
+        console.log(error);
+        error_message.innerHTML += error + '<br>';
+    }
+    bugreport_text = error_message.innerHTML
+
+    const reportLink = document.createElement('a');
+    reportLink.href = 'https://bugreports.qt.io/secure/CreateIssueDetails!init.jspa?pid=11740&issuetype=1&components=24729&versions=20809&summary=Design+Viewer+Crash&description=' + encodeURIComponent('Error:\n' + bugreport_text);
+
+    bugreport.innerHTML = '<br><br>You can easily report this issue at <a href="' + reportLink.href + '">Qt Bug Reports.</a>';
 }
 
 function handleFileSelection(event) {
@@ -243,21 +267,14 @@ async function loadProjector() {
                 },
                 onExit: exitData => {
                     console.log("onExit: " + exitData.code + " " + exitData.text);
-                    status.innerHTML = 'Application exit';
 
                     if (exitData.code === 0) {
                         status.innerHTML += ' with success.';
                         return;
                     }
 
-                    status.innerHTML += ' with an error.';
-                    status.innerHTML += '<br><br>Exit code:<br>' + exitData.code;
-                    status.innerHTML += '<br><br>Exit message:<br>' + exitData.text;
-
-                    const reportLink = document.createElement('a');
-                    reportLink.href = 'https://bugreports.qt.io/secure/CreateIssueDetails!init.jspa?pid=11740&issuetype=1&components=24729&versions=20809&summary=Design+Viewer+Crash&description=' + encodeURIComponent('Exit code:\n' + exitData.code + '\n\nExit message:\n' + exitData.text);
-
-                    status.innerHTML += '<br><br>You can report this issue at <a href="' + reportLink.href + '">Qt Bug Reports.</a>';
+                    console.error("Exit code: " + exitData.code);
+                    console.error("Exit data: " + JSON.stringify(exitData));
                 },
                 entryFunction: window.createQtAppInstance,
                 containerElements: [container]