From a15585c464e0e34e7fea4b8989a8a17db9e3155d Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Tue, 11 Nov 2025 10:57:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Service=20Worker=20=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E4=BF=AE=E5=A4=8D=E6=96=B9=E6=A1=88=201.=20?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E4=BA=86=20window.location.origin=EF=BC=8C?= =?UTF-8?q?=E4=BD=86=20Service=20Worker=20=E7=8E=AF=E5=A2=83=E4=B8=AD?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=20window=20=E5=AF=B9=E8=B1=A1=202.=20?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E9=80=BB=E8=BE=91=E7=BC=BA=E5=B0=91=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E7=9A=84=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E5=92=8C?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/service-worker.js | 2 +- src/index.js | 50 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/public/service-worker.js b/public/service-worker.js index 8570fbd1..3db0d127 100644 --- a/public/service-worker.js +++ b/public/service-worker.js @@ -35,7 +35,7 @@ self.addEventListener('notificationclick', (event) => { .then((windowClients) => { // 查找是否已有打开的窗口 for (let client of windowClients) { - if (client.url.includes(window.location.origin) && 'focus' in client) { + if (client.url.includes(self.location.origin) && 'focus' in client) { // 聚焦现有窗口并导航到目标页面 return client.focus().then(client => { return client.navigate(urlToOpen); diff --git a/src/index.js b/src/index.js index d2c327b0..510b097c 100755 --- a/src/index.js +++ b/src/index.js @@ -44,24 +44,64 @@ function registerServiceWorker() { navigator.serviceWorker .register('/service-worker.js') .then((registration) => { - console.log('[App] Service Worker registered successfully:', registration.scope); + console.log('[App] ✅ Service Worker 注册成功'); + console.log('[App] Scope:', registration.scope); - // 监听更新 + // 检查当前激活状态 + if (navigator.serviceWorker.controller) { + console.log('[App] ✅ Service Worker 已激活并控制页面'); + } else { + console.log('[App] ⏳ Service Worker 已注册,等待激活...'); + console.log('[App] 💡 刷新页面以激活 Service Worker'); + + // 监听 controller 变化(Service Worker 激活后触发) + navigator.serviceWorker.addEventListener('controllerchange', () => { + console.log('[App] ✅ Service Worker 控制器已更新'); + }); + } + + // 监听 Service Worker 更新 registration.addEventListener('updatefound', () => { const newWorker = registration.installing; - console.log('[App] Service Worker update found'); + console.log('[App] 🔄 发现 Service Worker 更新'); if (newWorker) { newWorker.addEventListener('statechange', () => { + console.log(`[App] Service Worker 状态: ${newWorker.state}`); if (newWorker.state === 'activated') { - console.log('[App] Service Worker activated'); + console.log('[App] ✅ Service Worker 已激活'); + + // 如果有旧的 Service Worker 在控制页面,提示用户刷新 + if (navigator.serviceWorker.controller) { + console.log('[App] 💡 Service Worker 已更新,建议刷新页面'); + } } }); } }); }) .catch((error) => { - console.error('[App] Service Worker registration failed:', error); + console.error('[App] ❌ Service Worker 注册失败'); + console.error('[App] 错误类型:', error.name); + console.error('[App] 错误信息:', error.message); + console.error('[App] 完整错误:', error); + + // 额外检查:验证文件是否可访问 + fetch('/service-worker.js', { method: 'HEAD' }) + .then(response => { + if (response.ok) { + console.error('[App] Service Worker 文件存在但注册失败'); + console.error('[App] 💡 可能的原因:'); + console.error('[App] 1. Service Worker 文件有语法错误'); + console.error('[App] 2. 浏览器不支持某些 Service Worker 特性'); + console.error('[App] 3. HTTPS 证书问题(Service Worker 需要 HTTPS)'); + } else { + console.error('[App] Service Worker 文件不存在(HTTP', response.status, ')'); + } + }) + .catch(fetchError => { + console.error('[App] 无法访问 Service Worker 文件:', fetchError.message); + }); }); }); } else {