Files
chinese-family-tree-2/lib/register-sw.ts
T
freedakgmail b25f4bea02 0.0.9.0
2025-11-24 16:07:24 +08:00

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)
})
}