const CACHE_NAME = 'media-player-cache-v1'; let cachedFiles = ['/index.html', '/index.html?mode=t']; // インストール時のキャッシュ処理 self.addEventListener('install', (event) => { event.waitUntil( caches.open(CACHE_NAME) .then(cache => { console.log('キャッシュを追加中:', cachedFiles); return cache.addAll(cachedFiles); }) .catch(error => { console.error('キャッシュ追加エラー:', error); }) ); }); self.addEventListener('message', (event) => { if (event.data && event.data.type === 'CACHE_FILES') { cachedFiles = ['/index.html', ...event.data.files]; // index.htmlは常に含める // チェックボックスの状態を保存 if (event.data.checkboxStates) { event.waitUntil( caches.open('settings-cache').then(cache => { return cache.put( new Request('checkbox-states'), new Response(JSON.stringify(event.data.checkboxStates)) ); }) ); } // 新しいキャッシュリストでキャッシュを更新 event.waitUntil( caches.open(CACHE_NAME).then(cache => { return cache.addAll(cachedFiles) .then(() => { console.log('すべてのファイルがキャッシュされました'); // 既存のキャッシュから不要なファイルを削除 return cache.keys().then(keys => { // キャッシュ内のURLからoriginを除去し、クエリも除いてパスのみ取得 const cachedPaths = keys.map(request => { const urlObj = new URL(request.url); return urlObj.pathname; }); cachedPaths.forEach((path, index) => { if (!cachedFiles.includes(path)) { cache.delete(keys[index]); } }); }); }) .catch(error => { console.error('キャッシュ追加エラー:', error); }); }) ); } }); // フェッチイベントの処理 self.addEventListener('fetch', (event) => { event.respondWith( caches.match(event.request) .then(response => { // キャッシュがあればそれを返す if (response) { return response; } // キャッシュがなければネットワークから取得 return fetch(event.request); }) ); });