feat(pwa): Network-First 서비스 워커 — 홈화면 앱 자동 갱신
- sw.js: Network-First 캐시 전략 (GET + same-origin + res.ok만 캐시) - tkfb-core.js: SW 등록 + 업데이트 감지 시 자동 새로고침 (최초 설치 시 토스트 방지: controller 체크) - manifest.json: start_url → dashboard-new.html - nginx: sw.js, manifest.json no-cache 헤더 - 배포 시 sw.js의 APP_VERSION만 변경하면 전 사용자 자동 갱신 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,18 @@
|
||||
/* ===== 서비스 워커 해제 (push-sw.js 제외) ===== */
|
||||
/* ===== 서비스 워커 등록 (Network-First 캐시) ===== */
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.getRegistrations().then(function(regs) { regs.forEach(function(r) {
|
||||
if (!r.active || !r.active.scriptURL.includes('push-sw.js')) { r.unregister(); }
|
||||
}); });
|
||||
if (typeof caches !== 'undefined') { caches.keys().then(function(ns) { ns.forEach(function(n) { caches.delete(n); }); }); }
|
||||
navigator.serviceWorker.register('/sw.js').then(function(reg) {
|
||||
// 기존 SW가 있을 때만 업데이트 감지 (최초 설치 시 토스트 방지)
|
||||
if (!navigator.serviceWorker.controller) return;
|
||||
reg.addEventListener('updatefound', function() {
|
||||
var newSW = reg.installing;
|
||||
newSW.addEventListener('statechange', function() {
|
||||
if (newSW.state === 'activated') {
|
||||
showToast('새 버전이 적용되었습니다.', 'info');
|
||||
setTimeout(function() { location.reload(); }, 1500);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/* ===== Config ===== */
|
||||
|
||||
Reference in New Issue
Block a user