47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
export function registerServiceWorker() {
|
|
if (typeof window === "undefined" || !("serviceWorker" in navigator)) {
|
|
console.log("Service Worker 不被支持")
|
|
return
|
|
}
|
|
|
|
window.addEventListener("load", () => {
|
|
navigator.serviceWorker
|
|
.register("/sw.js")
|
|
.then((registration) => {
|
|
console.log("Service Worker 注册成功:", registration.scope)
|
|
|
|
// 检查更新
|
|
registration.addEventListener("updatefound", () => {
|
|
const newWorker = registration.installing
|
|
if (newWorker) {
|
|
newWorker.addEventListener("statechange", () => {
|
|
if (newWorker.state === "installed" && navigator.serviceWorker.controller) {
|
|
// 新的 Service Worker 已安装,提示用户刷新
|
|
if (confirm("发现新版本,是否立即更新?")) {
|
|
window.location.reload()
|
|
}
|
|
}
|
|
})
|
|
}
|
|
})
|
|
})
|
|
.catch((error) => {
|
|
console.log("Service Worker 注册失败:", error)
|
|
})
|
|
})
|
|
}
|
|
|
|
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)
|
|
})
|
|
}
|