Spaces:
Running
Running
const CACHE_NAME = 'dance-video-cache-v' + new Date().getTime(); // 毎回異なるキャッシュ名 | |
const ASSETS_TO_CACHE = [ | |
'/', | |
'/index.html', | |
'/videos/k-back-human.mp4', | |
'/videos/k-back-stick-human.mp4', | |
'/videos/k-back-stick.mp4', | |
'/videos/k-human.mp4', | |
'/videos/k-stick-human.mp4', | |
'/videos/m-back-human.mp4', | |
'/videos/m-back-stick-human.mp4', | |
'/videos/m-back-stick.mp4', | |
'/videos/m-human.mp4', | |
'/videos/m-stick-human.mp4', | |
'/videos/e-back-human.mp4', | |
'/videos/e-back-stick-human.mp4', | |
'/videos/e-back-stick.mp4', | |
'/videos/e-human.mp4', | |
'/videos/e-stick-human.mp4' | |
]; | |
self.addEventListener('install', event => { | |
self.skipWaiting(); // 新しいSWを即時アクティベート | |
event.waitUntil( | |
caches.open(CACHE_NAME) | |
.then(cache => { | |
console.log('Opened cache'); | |
return cache.addAll(ASSETS_TO_CACHE.map(url => new Request(url, {cache: 'reload'}))); | |
}) | |
.catch(error => console.log('Cache addAll error:', error)) | |
); | |
}); | |
self.addEventListener('activate', event => { | |
event.waitUntil( | |
caches.keys().then(cacheNames => { | |
return Promise.all( | |
cacheNames.map(cacheName => { | |
if (cacheName !== CACHE_NAME) { | |
console.log('Deleting old cache:', cacheName); | |
return caches.delete(cacheName); | |
} | |
}) | |
); | |
}).then(() => self.clients.claim()) // すべてのクライアントを制御 | |
); | |
}); | |
self.addEventListener('fetch', event => { | |
// 外部リソースはキャッシュしない | |
if (event.request.url.startsWith('http') && | |
!event.request.url.startsWith(self.location.origin)) { | |
event.respondWith(fetch(event.request)); | |
return; | |
} | |
event.respondWith( | |
caches.match(event.request) | |
.then(response => { | |
// キャッシュがあれば返す、なければフェッチしてキャッシュ | |
return response || fetch(event.request).then(response => { | |
// クローンを作成(ストリームは一度しか読めないため) | |
const responseToCache = response.clone(); | |
caches.open(CACHE_NAME) | |
.then(cache => cache.put(event.request, responseToCache)); | |
return response; | |
}); | |
}) | |
.catch(error => { | |
console.log('Fetch failed; returning offline page:', error); | |
return caches.match('/offline.html'); // オフラインページがあれば | |
}) | |
); | |
}); |