feat(wip): serviceworker
* 用于缓存等
This commit is contained in:
@@ -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
30
client/sw.ts
Normal 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 在这里不可用
|
||||
}
|
||||
})
|
||||
})()
|
||||
)
|
||||
})
|
||||
Reference in New Issue
Block a user