File size: 1,680 Bytes
23443f5
39eaa9c
266d361
966f2f5
e67a04b
266d361
23443f5
966f2f5
 
fb0ef54
266d361
966f2f5
 
 
 
 
 
610a87b
966f2f5
 
 
e80644a
266d361
966f2f5
 
 
 
610a87b
966f2f5
 
 
fb0ef54
966f2f5
 
 
 
 
 
 
 
 
e80644a
39eaa9c
966f2f5
 
 
 
 
 
 
 
266d361
23443f5
39eaa9c
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
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <title>Blob Service Worker サンプル</title><script src="dev-tools.js"></script>
</head>
<body>
  <h1>Blob Service Worker デモ</h1>
  <button id="fetch-button">データ取得</button>

  <script>
    // 1. Service Worker のコードを文字列として用意
    const swCode = `
      self.addEventListener('install', event => {
        console.log('[SW] Installed');
        self.skipWaiting(); // 即時有効化(開発用)
      });

      self.addEventListener('activate', event => {
        console.log('[SW] Activated');
        event.waitUntil(self.clients.claim());
      });

      self.addEventListener('fetch', event => {
        console.log('[SW] Fetch intercepted:', event.request.url);
      });
    `;

    // 2. Blob を作成し、オブジェクトURLに変換
    const blob = new Blob([swCode], { type: 'application/javascript' });
    const blobUrl = URL.createObjectURL(blob);

    // 3. Service Worker を登録
    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register(blobUrl)
        .then(reg => {
          console.log('[Main] Service Worker registered from Blob:', reg.scope);
        })
        .catch(err => {
          console.error('[Main] Registration failed:', err);
        });
    }

    // 4. デモ用:ボタンクリックで fetch 通信
    document.getElementById('fetch-button').addEventListener('click', () => {
      fetch('https://jsonplaceholder.typicode.com/posts/1')
        .then(res => res.json())
        .then(data => {
          console.log('[Main] Fetched data:', data);
        });
    });
  </script>
</body>
</html>