mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 09:37:26 +08:00
This commit is contained in:
1 parent
773846d803
commit
44cc5c88fd
2 files changed
+31
-5
No files matched your search
@@ -421,6 +421,7 @@ async function prepareOffline() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
el.offlineStatus.textContent = "可离线";
|
el.offlineStatus.textContent = "可离线";
|
||||||
|
watchApplicationUpdates(result.checksum);
|
||||||
} catch {
|
} catch {
|
||||||
el.offlineStatus.textContent = "未就绪";
|
el.offlineStatus.textContent = "未就绪";
|
||||||
}
|
}
|
||||||
@@ -428,6 +429,29 @@ async function prepareOffline() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function watchApplicationUpdates(checksum) {
|
||||||
|
let checking = false;
|
||||||
|
async function check() {
|
||||||
|
if (checking || document.hidden || !navigator.onLine) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
checking = true;
|
||||||
|
try {
|
||||||
|
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) {
|
||||||
|
el.offlineStatus.textContent = latest === checksum ? "可离线" : "可更新";
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
} finally {
|
||||||
|
checking = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
window.addEventListener("online", check);
|
||||||
|
document.addEventListener("visibilitychange", check);
|
||||||
|
check();
|
||||||
|
}
|
||||||
|
|
||||||
function waitForWorker(worker, target) {
|
function waitForWorker(worker, target) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
function changed() {
|
function changed() {
|
||||||
|
|||||||
@@ -25,24 +25,26 @@ self.addEventListener("message", (event) => {
|
|||||||
}
|
}
|
||||||
event.waitUntil((async () => {
|
event.waitUntil((async () => {
|
||||||
try {
|
try {
|
||||||
const reload = await navigator.locks.request(CACHE_PREFIX, async () => {
|
const result = await navigator.locks.request(CACHE_PREFIX, async () => {
|
||||||
const meta = await caches.open(META_CACHE);
|
const meta = await caches.open(META_CACHE);
|
||||||
await cleanBundles(meta);
|
await cleanBundles(meta);
|
||||||
if (type === "refresh") {
|
if (type === "refresh") {
|
||||||
await updateBundle(meta);
|
await updateBundle(meta);
|
||||||
return true;
|
return { reload: true };
|
||||||
}
|
}
|
||||||
const bundle = await readBundle(meta, CLIENT_PREFIX + event.source.id);
|
const bundle = await readBundle(meta, CLIENT_PREFIX + event.source.id);
|
||||||
if (await isBundleComplete(bundle)) {
|
if (await isBundleComplete(bundle)) {
|
||||||
return false;
|
const cache = await caches.open(bundle.name);
|
||||||
|
const response = await cache.match(self.registration.scope);
|
||||||
|
return { reload: false, checksum: response.headers.get("X-OFDGo-Checksum") };
|
||||||
}
|
}
|
||||||
await currentBundle(meta);
|
await currentBundle(meta);
|
||||||
return true;
|
return { reload: true };
|
||||||
});
|
});
|
||||||
if (type === "refresh") {
|
if (type === "refresh") {
|
||||||
await self.skipWaiting();
|
await self.skipWaiting();
|
||||||
}
|
}
|
||||||
port.postMessage({ ok: true, reload });
|
port.postMessage({ ok: true, ...result });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
port.postMessage({ error: err.message });
|
port.postMessage({ error: err.message });
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
Reference in new issue
Block a user