service worker stuff #40

Merged
yaso_meth merged 1 commits from v.1.2.7 into main 2026-06-02 08:06:53 +00:00
+15 -14
View File
@@ -3,26 +3,35 @@
const serviceWorkerVersion = '{{flutter_service_worker_version}}'; const serviceWorkerVersion = '{{flutter_service_worker_version}}';
if ('serviceWorker' in navigator) { // 1. Let Flutter handle the service worker registration cleanly via its native loader
window.addEventListener('load', function () { _flutter.loader.load({
const serviceWorkerUrl = 'flutter_service_worker.js?v=' + serviceWorkerVersion; serviceWorkerSettings: {
serviceWorkerVersion: serviceWorkerVersion
}
});
// Manually register here so we can attach custom update listeners // 2. Safely monitor the registration generated by Flutter without double-registering
navigator.serviceWorker.register(serviceWorkerUrl).then((reg) => { if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready.then((reg) => {
// If an updated worker is already waiting in the background
if (reg.waiting) { if (reg.waiting) {
showUpdatePrompt(reg); showUpdatePrompt(reg);
} }
// Listen for new updates found while the user has the app open
reg.addEventListener('updatefound', () => { reg.addEventListener('updatefound', () => {
const newWorker = reg.installing; const newWorker = reg.installing;
if (newWorker) {
newWorker.addEventListener('statechange', () => { newWorker.addEventListener('statechange', () => {
if (newWorker.state === 'installed' && navigator.serviceWorker.controller) { if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
showUpdatePrompt(reg); showUpdatePrompt(reg);
} }
}); });
}
}); });
}); });
// Guard against infinite reload loops when the controller shifts
let refreshing = false; let refreshing = false;
navigator.serviceWorker.addEventListener('controllerchange', () => { navigator.serviceWorker.addEventListener('controllerchange', () => {
if (!refreshing) { if (!refreshing) {
@@ -30,20 +39,12 @@ if ('serviceWorker' in navigator) {
window.location.reload(); window.location.reload();
} }
}); });
});
} }
function showUpdatePrompt(reg) { function showUpdatePrompt(reg) {
if (confirm('A new version of MIH is available. Refresh now to update?')) { if (confirm('A new version of MIH is available. Refresh now to update?')) {
reg.unregister().then(function () { reg.unregister().then(function () {
window.location.reload(); // Bypass cache and reload window.location.reload(); // Unregister and reload to force clear the browser's cache
}); });
} }
} }
// Initialize Flutter and pass the service worker version
_flutter.loader.load({
serviceWorkerSettings: {
serviceWorkerVersion: serviceWorkerVersion
}
});