|
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]; |
|
|
|
|
|
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 => { |
|
|
|
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); |
|
}) |
|
); |
|
}); |