49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
export function registerServiceWorker() {
|
|
if (typeof window === "undefined" || !("serviceWorker" in navigator)) {
|
|
console.log("Service Worker 不被支持")
|
|
return
|
|
}
|
|
|
|
const register = () => {
|
|
navigator.serviceWorker
|
|
.register("/sw.js")
|
|
.then((registration) => {
|
|
// 检查更新
|
|
registration.addEventListener("updatefound", () => {
|
|
const newWorker = registration.installing
|
|
if (newWorker) {
|
|
newWorker.addEventListener("statechange", () => {
|
|
if (newWorker.state === "installed" && navigator.serviceWorker.controller) {
|
|
// 新的 Service Worker 已安装
|
|
}
|
|
})
|
|
}
|
|
})
|
|
})
|
|
.catch((error) => {
|
|
console.error("Service Worker 注册失败:", error)
|
|
})
|
|
}
|
|
|
|
// 如果页面已经加载完成,直接注册;否则等待 load 事件
|
|
if (document.readyState === "complete") {
|
|
register()
|
|
} else {
|
|
window.addEventListener("load", register)
|
|
}
|
|
}
|
|
|
|
export function unregisterServiceWorker() {
|
|
if (typeof window === "undefined" || !("serviceWorker" in navigator)) {
|
|
return
|
|
}
|
|
|
|
navigator.serviceWorker.ready
|
|
.then((registration) => {
|
|
registration.unregister()
|
|
})
|
|
.catch((error) => {
|
|
console.error("Service Worker 注销失败:", error)
|
|
})
|
|
}
|