59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
export function registerServiceWorker() {
|
|
if (typeof window === "undefined" || !("serviceWorker" in navigator)) {
|
|
// Service Worker 不被支持,静默跳过
|
|
return
|
|
}
|
|
|
|
// 只在 HTTPS 或 localhost 环境下注册 Service Worker
|
|
const isSecureContext = window.location.protocol === "https:" ||
|
|
window.location.hostname === "localhost" ||
|
|
window.location.hostname === "127.0.0.1"
|
|
|
|
if (!isSecureContext) {
|
|
// 非安全环境,静默跳过 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)
|
|
})
|
|
}
|