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);
            })
    );
});