mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-11 23:04:52 +09:00
Catch uncaught errors and display the error message on the page itself if bootstraping fails. This should prevent most cases of the of the web interface being stuck on "Loading web interface..." after an error was thrown and the loading failed.
50 lines
1.4 KiB
HTML
50 lines
1.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<meta name="theme-color" content="#2a2a2a" />
|
|
<title>__CLUSTER_NAME__</title>
|
|
<style>
|
|
html {
|
|
color: #fff;
|
|
background-color: #000;
|
|
}
|
|
|
|
#bootstrap-msg {
|
|
font: 20px serif;
|
|
color: #aaa;
|
|
margin: auto;
|
|
margin-top: 1em;
|
|
width: fit-content;
|
|
white-space: pre;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
<div id="root">
|
|
<div id="bootstrap-msg">Loading web interface...</div>
|
|
</div>
|
|
<script id="script-bundle" src="__STATIC_ROOT____MAIN_BUNDLE__" defer></script>
|
|
<script>
|
|
webRoot = new URL("__WEB_ROOT__", document.location).pathname;
|
|
staticRoot = new URL("__STATIC_ROOT__", document.location).pathname;
|
|
function scriptError(err) {
|
|
console.error(err);
|
|
let bootstrapMsg = document.getElementById("bootstrap-msg");
|
|
if (bootstrapMsg) {
|
|
let errorMsg = err;
|
|
if (err?.message) {
|
|
errorMsg = `${err?.constructor?.name ?? "Error"}: ${err.message}`;
|
|
}
|
|
bootstrapMsg.textContent = `${errorMsg}\nSee web console for details.`;
|
|
}
|
|
}
|
|
const bundleScript = document.getElementById("script-bundle");
|
|
bundleScript.addEventListener("error", () => scriptError("Main bundle failed to load."));
|
|
window.addEventListener("error", event => scriptError(event.error));
|
|
</script>
|
|
</body>
|
|
</html>
|