soiz1 commited on
Commit
1da815e
·
1 Parent(s): 80e779c

Update service-worker.js

Browse files
Files changed (1) hide show
  1. service-worker.js +75 -38
service-worker.js CHANGED
@@ -1,51 +1,88 @@
1
  const CACHE_NAME = 'my-cache-v1';
2
- const OFFLINE_URLS = [
3
- '/',
4
- '/index.html',
5
- // 必要に応じてCSSやJSも追加
 
 
 
 
 
 
 
 
 
 
 
6
  ];
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  // インストール:キャッシュを保存
9
  self.addEventListener('install', event => {
10
- event.waitUntil(
11
- caches.open(CACHE_NAME).then(cache => {
12
- return cache.addAll(OFFLINE_URLS);
13
- })
14
- );
15
- self.skipWaiting(); // すぐに有効化
 
 
16
  });
17
 
18
  // アクティベート:古いキャッシュ削除
19
  self.addEventListener('activate', event => {
20
- event.waitUntil(
21
- caches.keys().then(keys =>
22
- Promise.all(
23
- keys.map(key => {
24
- if (key !== CACHE_NAME) {
25
- return caches.delete(key);
26
- }
27
- })
28
- )
29
- )
30
- );
31
- self.clients.claim(); // 即時制御
32
  });
33
 
34
  // フェッチ:ネット優先、失敗時にキャッシュ
35
  self.addEventListener('fetch', event => {
36
- event.respondWith(
37
- fetch(event.request)
38
- .then(response => {
39
- // ネットから取得できたのでキャッシュ更新
40
- const responseClone = response.clone();
41
- caches.open(CACHE_NAME).then(cache => {
42
- cache.put(event.request, responseClone);
43
- });
44
- return response;
45
- })
46
- .catch(() => {
47
- // ネットがだめならキャッシュから
48
- return caches.match(event.request);
49
- })
50
- );
51
- });
 
 
 
 
 
 
 
 
 
1
  const CACHE_NAME = 'my-cache-v1';
2
+ let cachedFiles = [
3
+ '/',
4
+ '/index.html',
5
+ '/v.mp4',
6
+ '/p.mp3',
7
+ '/s.mp3',
8
+ '/a.mp3',
9
+ '/t.mp3',
10
+ '/k.mp3',
11
+ '/t/v.mp4',
12
+ '/t/p.mp3',
13
+ '/t/s.mp3',
14
+ '/t/a.mp3',
15
+ '/t/t.mp3',
16
+ '/t/k.mp3'
17
  ];
18
 
19
+ // メッセージ受信処理
20
+ self.addEventListener('message', (event) => {
21
+ if (event.data && event.data.type === 'CACHE_FILES') {
22
+ cachedFiles = event.data.files;
23
+
24
+ // 新しいキャッシュリストでキャッシュを更新
25
+ event.waitUntil(
26
+ caches.open(CACHE_NAME).then(cache => {
27
+ return cache.addAll(cachedFiles).catch(error => {
28
+ console.error('キャッシュ追加エラー:', error);
29
+ });
30
+ })
31
+ );
32
+ }
33
+ });
34
+
35
  // インストール:キャッシュを保存
36
  self.addEventListener('install', event => {
37
+ event.waitUntil(
38
+ caches.open(CACHE_NAME).then(cache => {
39
+ return cache.addAll(cachedFiles).catch(error => {
40
+ console.error('初期キャッシュエラー:', error);
41
+ });
42
+ })
43
+ );
44
+ self.skipWaiting(); // すぐに有効化
45
  });
46
 
47
  // アクティベート:古いキャッシュ削除
48
  self.addEventListener('activate', event => {
49
+ event.waitUntil(
50
+ caches.keys().then(keys =>
51
+ Promise.all(
52
+ keys.map(key => {
53
+ if (key !== CACHE_NAME) {
54
+ return caches.delete(key);
55
+ }
56
+ })
57
+ )
58
+ )
59
+ );
60
+ self.clients.claim(); // 即時制御
61
  });
62
 
63
  // フェッチ:ネット優先、失敗時にキャッシュ
64
  self.addEventListener('fetch', event => {
65
+ // キャッシュリストにないファイルはキャッシュしない
66
+ const url = new URL(event.request.url);
67
+ const path = url.pathname;
68
+
69
+ if (!cachedFiles.includes(path)) {
70
+ return fetch(event.request);
71
+ }
72
+
73
+ event.respondWith(
74
+ fetch(event.request)
75
+ .then(response => {
76
+ // ネットから取得できたのでキャッシュ更新
77
+ const responseClone = response.clone();
78
+ caches.open(CACHE_NAME).then(cache => {
79
+ cache.put(event.request, responseClone);
80
+ });
81
+ return response;
82
+ })
83
+ .catch(() => {
84
+ // ネットがだめならキャッシュから
85
+ return caches.match(event.request);
86
+ })
87
+ );
88
+ });