diff options
Diffstat (limited to 'web/index.html')
-rw-r--r-- | web/index.html | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..db1cbe6 --- /dev/null +++ b/web/index.html @@ -0,0 +1,101 @@ +<!DOCTYPE html> +<html> +<head> + <!-- + If you are serving your web app in a path other than the root, change the + href value below to reflect the base path you are serving from. + + The path provided below has to start and end with a slash "/" in order for + it to work correctly. + + For more details: + * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base + + This is a placeholder for base href that will be replaced by the value of + the `--base-href` argument provided to `flutter build`. + --> + <base href="$FLUTTER_BASE_HREF"> + + <meta charset="UTF-8"> + <meta content="IE=Edge" http-equiv="X-UA-Compatible"> + <meta name="description" content="A new Flutter project."> + + <!-- iOS meta tags & icons --> + <meta name="apple-mobile-web-app-capable" content="yes"> + <meta name="apple-mobile-web-app-status-bar-style" content="black"> + <meta name="apple-mobile-web-app-title" content="doujinsea"> + <link rel="apple-touch-icon" href="icons/Icon-192.png"> + + <title>doujinsea</title> + <link rel="manifest" href="manifest.json"> +</head> +<body> + <!-- This script installs service_worker.js to provide PWA functionality to + application. For more information, see: + https://developers.google.com/web/fundamentals/primers/service-workers --> + <script> + var serviceWorkerVersion = null; + var scriptLoaded = false; + function loadMainDartJs() { + if (scriptLoaded) { + return; + } + scriptLoaded = true; + var scriptTag = document.createElement('script'); + scriptTag.src = 'main.dart.js'; + scriptTag.type = 'application/javascript'; + document.body.append(scriptTag); + } + + if ('serviceWorker' in navigator) { + // Service workers are supported. Use them. + window.addEventListener('load', function () { + // Wait for registration to finish before dropping the <script> tag. + // Otherwise, the browser will load the script multiple times, + // potentially different versions. + var serviceWorkerUrl = 'flutter_service_worker.js?v=' + serviceWorkerVersion; + navigator.serviceWorker.register(serviceWorkerUrl) + .then((reg) => { + function waitForActivation(serviceWorker) { + serviceWorker.addEventListener('statechange', () => { + if (serviceWorker.state == 'activated') { + console.log('Installed new service worker.'); + loadMainDartJs(); + } + }); + } + if (!reg.active && (reg.installing || reg.waiting)) { + // No active web worker and we have installed or are installing + // one for the first time. Simply wait for it to activate. + waitForActivation(reg.installing || reg.waiting); + } else if (!reg.active.scriptURL.endsWith(serviceWorkerVersion)) { + // When the app updates the serviceWorkerVersion changes, so we + // need to ask the service worker to update. + console.log('New service worker available.'); + reg.update(); + waitForActivation(reg.installing); + } else { + // Existing service worker is still good. + console.log('Loading app from service worker.'); + loadMainDartJs(); + } + }); + + // If service worker doesn't succeed in a reasonable amount of time, + // fallback to plaint <script> tag. + setTimeout(() => { + if (!scriptLoaded) { + console.warn( + 'Failed to load app from service worker. Falling back to plain <script> tag.', + ); + loadMainDartJs(); + } + }, 4000); + }); + } else { + // Service workers not supported. Just drop the <script> tag. + loadMainDartJs(); + } + </script> +</body> +</html> |