File size: 2,927 Bytes
9d43c0f c703769 9d43c0f 1da815e 9daf3ee 9844dd5 9daf3ee 1da815e 9d43c0f 8639b99 9844dd5 9d43c0f 1da815e 9d43c0f 8639b99 9d43c0f 1da815e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
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);
})
);
}); |