feat(更新提醒): 修复更新提醒漏检
build.yaml / build (push) Successful in 42s

This commit is contained in:
xiaoqidun committed 2026-10-17 22:34:05 +08:00
1 parent 829d59e652
commit 7a39cb3d29
1 file changed
+11 -1
+11 -1
View File
@@ -4169,6 +4169,7 @@ async function prepareOffline() {
return true; return true;
} }
setProgress("正在准备离线", null, "正在准备离线"); setProgress("正在准备离线", null, "正在准备离线");
let checksum;
try { try {
const registration = await registerOffline(); const registration = await registerOffline();
const result = await requestOffline(registration.active, "prepare"); const result = await requestOffline(registration.active, "prepare");
@@ -4179,9 +4180,10 @@ async function prepareOffline() {
if (navigator.storage?.persist) { if (navigator.storage?.persist) {
navigator.storage.persist().catch(() => false); navigator.storage.persist().catch(() => false);
} }
watchApplicationUpdates(result.checksum); checksum = result.checksum;
} catch { } catch {
} }
watchApplicationUpdates(checksum);
el.refreshAppButton.disabled = false; el.refreshAppButton.disabled = false;
return true; return true;
} }
@@ -4196,6 +4198,13 @@ function watchApplicationUpdates(checksum) {
checking = true; checking = true;
checked = Date.now(); checked = Date.now();
try { 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 response = await fetch("./", { method: "HEAD", cache: "no-store", signal: AbortSignal.timeout(10000) });
const latest = response.headers.get("X-OFDGo-Checksum"); const latest = response.headers.get("X-OFDGo-Checksum");
if (response.ok && !response.redirected && latest) { if (response.ok && !response.redirected && latest) {
@@ -4207,6 +4216,7 @@ function watchApplicationUpdates(checksum) {
} }
} }
window.addEventListener("online", check); window.addEventListener("online", check);
window.addEventListener("focus", check);
document.addEventListener("visibilitychange", check); document.addEventListener("visibilitychange", check);
window.setInterval(check, 300000); window.setInterval(check, 300000);
check(); check();