fix(sw): skip controllerchange reload on first activation
The reload should only fire when an existing SW is replaced by a new one (old → new), not when the SW activates for the first time on a fresh page load (null → first). The spurious reload on fresh loads was caused by checking unconditionally. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -344,7 +344,12 @@ $effect(() => {
|
||||
// silently runs whatever JS it had at the time the SW changed. This caused IDAA and
|
||||
// other users to run stale code for weeks at a time across multiple deployments.
|
||||
// Added 2026-06-22 to close this gap.
|
||||
const on_controller_change = () => window.location.reload();
|
||||
// Capture before registering — if null, this is first activation (fresh page load)
|
||||
// and the reload is unnecessary since assets were already fetched without the SW.
|
||||
const had_controller = !!navigator.serviceWorker.controller;
|
||||
const on_controller_change = () => {
|
||||
if (had_controller) window.location.reload();
|
||||
};
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.addEventListener('controllerchange', on_controller_change);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user