feat(wip): serviceworker

* 用于缓存等
This commit is contained in:
CrescentLeaf
2025-11-01 01:08:52 +08:00
parent bd35f5c3eb
commit 51c6d1f0a6
2 changed files with 42 additions and 1 deletions

View File

@@ -25,3 +25,14 @@ const onResize = () => {
// deno-lint-ignore no-window no-window-prefix
window.addEventListener('resize', onResize)
onResize()
// @ts-ignore 工作正常, 这里是获取为 URL 以便于构建
import sw from './sw.ts?worker&url'
if ("serviceWorker" in navigator)
try {
navigator.serviceWorker
.register(sw as URL)
} catch (e) {
console.error(e)
}

30
client/sw.ts Normal file
View File

@@ -0,0 +1,30 @@
interface FetchEvent extends Event {
waitUntil: (p: Promise<unknown | void>) => void
request: Request
respondWith: (r: Response | Promise<Response>) => void
}
// 上传文件的代理与缓存
self.addEventListener("fetch", (e) => {
const event = e as FetchEvent
if (event.request.method != "GET" || event.request.url.indexOf("/uploaded_files/") == -1) return
event.respondWith(
(async () => {
const cache = await caches.open("LingChair-UploadedFile-Cache")
const cachedResponse = await cache.match(event.request)
if (cachedResponse) {
event.waitUntil(cache.add(event.request))
return cachedResponse
}
return fetch({
...event.request,
headers: {
...event.request.headers,
// 目前还不能获取 token
// localsotrage 在这里不可用
}
})
})()
)
})