feat(wip): serviceworker
* 用于缓存等
This commit is contained in:
@@ -24,4 +24,15 @@ const onResize = () => {
|
|||||||
}
|
}
|
||||||
// deno-lint-ignore no-window no-window-prefix
|
// deno-lint-ignore no-window no-window-prefix
|
||||||
window.addEventListener('resize', onResize)
|
window.addEventListener('resize', onResize)
|
||||||
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