soiz1 commited on
Commit
69869ba
·
verified ·
1 Parent(s): 8bab24f

Update sw.js

Browse files
Files changed (1) hide show
  1. sw.js +43 -56
sw.js CHANGED
@@ -1,71 +1,58 @@
1
  const CACHE_NAME = 'media-player-cache-v1';
2
-
3
- const cachedFiles = [
4
- '/index.html',
5
- '/index.html?mode=t',
6
- '/v.mp4',
7
- '/t/v.mp4',
8
- '/p.mp3',
9
- '/s.mp3',
10
- '/a.mp3',
11
- '/t.mp3',
12
- '/k.mp3',
13
- '/t/p.mp3',
14
- '/t/s.mp3',
15
- '/t/a.mp3',
16
- '/t/t.mp3',
17
- '/t/k.mp3'
18
  ];
19
 
20
- // インストール時:すべてのファイルをキャッシュ
21
  self.addEventListener('install', (event) => {
22
- self.skipWaiting(); // 即時有効化
23
  event.waitUntil(
24
- caches.open(CACHE_NAME)
25
- .then(cache => {
26
- console.log('キャッシュを追加中:', cachedFiles);
27
- return cache.addAll(cachedFiles);
28
- })
29
- .catch(error => {
30
- console.error('キャッシュ追加エラー:', error);
31
- })
32
  );
33
  });
34
 
35
- // アクティベート時:即座にコントロール
36
- self.addEventListener('activate', (event) => {
37
- console.log('Service Worker アクティベート');
38
- event.waitUntil(self.clients.claim());
39
- });
40
-
41
- // フェッチ:キャッシュ優先
42
  self.addEventListener('fetch', (event) => {
43
  event.respondWith(
44
- caches.match(event.request)
45
- .then(response => {
46
- return response || fetch(event.request);
47
- })
48
  );
49
  });
50
- self.addEventListener('fetch', (event) => {
51
- console.log('[SW] fetch:', event.request.url);
52
- event.respondWith(
53
- caches.match(event.request, { ignoreSearch: true })
54
- .then(response => {
55
- if (response) {
56
- console.log('[SW] キャッシュヒット:', event.request.url);
57
- return response;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  }
59
- console.log('[SW] ネットワーク取得:', event.request.url);
60
- return fetch(event.request);
61
  })
62
- .catch(err => {
63
- console.error('[SW] フェッチエラー:', event.request.url, err);
64
- return new Response('オフラインでアクセスできません', {
65
- status: 503,
66
- statusText: 'Offline',
67
- });
68
- })
69
- );
70
  });
71
-
 
1
  const CACHE_NAME = 'media-player-cache-v1';
2
+ let cachedFiles = [
3
+ '/index.html', '/index.html?mode=t',
4
+ '/v.mp4', '/t/v.mp4',
5
+ '/p.mp3', '/s.mp3', '/a.mp3', '/t.mp3', '/k.mp3',
6
+ '/t/p.mp3', '/t/s.mp3', '/t/a.mp3', '/t/t.mp3', '/t/k.mp3'
 
 
 
 
 
 
 
 
 
 
 
7
  ];
8
 
9
+ // install: ファイルを個別にキャッシュ
10
  self.addEventListener('install', (event) => {
 
11
  event.waitUntil(
12
+ caches.open(CACHE_NAME).then(async cache => {
13
+ console.log('キャッシュを追加中:', cachedFiles);
14
+ await Promise.allSettled(
15
+ cachedFiles.map(file =>
16
+ cache.add(file).catch(err => console.warn(`キャッシュ失敗: ${file}`, err))
17
+ )
18
+ );
19
+ })
20
  );
21
  });
22
 
23
+ // fetch: キャッシュ優先
 
 
 
 
 
 
24
  self.addEventListener('fetch', (event) => {
25
  event.respondWith(
26
+ caches.match(event.request).then(response => {
27
+ return response || fetch(event.request);
28
+ })
 
29
  );
30
  });
31
+
32
+ // message: 動的にファイルを更新する場合の処理
33
+ self.addEventListener('message', (event) => {
34
+ if (event.data?.type === 'CACHE_FILES') {
35
+ const files = event.data.files || [];
36
+ cachedFiles = ['/index.html', ...files];
37
+
38
+ event.waitUntil(
39
+ caches.open(CACHE_NAME).then(async cache => {
40
+ await Promise.allSettled(
41
+ cachedFiles.map(file =>
42
+ cache.add(file).catch(err => console.warn(`キャッシュ失敗: ${file}`, err))
43
+ )
44
+ );
45
+
46
+ const keys = await cache.keys();
47
+ const validPaths = new Set(cachedFiles);
48
+
49
+ for (const request of keys) {
50
+ const path = new URL(request.url).pathname;
51
+ if (!validPaths.has(path)) {
52
+ await cache.delete(request);
53
+ }
54
  }
 
 
55
  })
56
+ );
57
+ }
 
 
 
 
 
 
58
  });