From 7a39cb3d29fa945099853b3b2e4154bf79787003 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Sat, 17 Oct 2026 22:34:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=9B=B4=E6=96=B0=E6=8F=90=E9=86=92):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9B=B4=E6=96=B0=E6=8F=90=E9=86=92=E6=BC=8F?= =?UTF-8?q?=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/webui/ofdgo.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js index 745702f..dfb379b 100644 --- a/assets/webui/ofdgo.js +++ b/assets/webui/ofdgo.js @@ -4169,6 +4169,7 @@ async function prepareOffline() { return true; } setProgress("正在准备离线", null, "正在准备离线"); + let checksum; try { const registration = await registerOffline(); const result = await requestOffline(registration.active, "prepare"); @@ -4179,9 +4180,10 @@ async function prepareOffline() { if (navigator.storage?.persist) { navigator.storage.persist().catch(() => false); } - watchApplicationUpdates(result.checksum); + checksum = result.checksum; } catch { } + watchApplicationUpdates(checksum); el.refreshAppButton.disabled = false; return true; } @@ -4196,6 +4198,13 @@ function watchApplicationUpdates(checksum) { checking = true; checked = Date.now(); try { + if (!checksum) { + if (!navigator.serviceWorker.controller) return; + const current = await fetch("./ofdgo.js", { signal: AbortSignal.timeout(10000) }); + if (current.ok && !current.redirected) checksum = current.headers.get("X-OFDGo-Checksum"); + await current.body?.cancel(); + if (!checksum) return; + } const response = await fetch("./", { method: "HEAD", cache: "no-store", signal: AbortSignal.timeout(10000) }); const latest = response.headers.get("X-OFDGo-Checksum"); if (response.ok && !response.redirected && latest) { @@ -4207,6 +4216,7 @@ function watchApplicationUpdates(checksum) { } } window.addEventListener("online", check); + window.addEventListener("focus", check); document.addEventListener("visibilitychange", check); window.setInterval(check, 300000); check();