ユーザ用ツール

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
ハイハイスクールアドベンチャー_web版 [2025/10/20 01:57] – [画像を拡大せよ] arakiハイハイスクールアドベンチャー_web版 [2025/10/20 02:00] (現在) – [PWA] araki
行 249: 行 249:
 if ('serviceWorker' in navigator) if ('serviceWorker' in navigator)
 { {
 +    navigator.serviceWorker.addEventListener('message', (event) => {
 + if (event.data && event.data.type == 'UPDATE_AVAILABLE') {
 +     const shouldReload = confirm('更新が利用可能です。更新しますか?');
 +     if (shouldReload)
 +     {
 + window.location.reload();
 +     }
 + }
 +    });
     navigator.serviceWorker.register('sw.js');     navigator.serviceWorker.register('sw.js');
 } }
行 298: 行 307:
                 })                 })
         );         );
 +});
 +
 +// update
 +self.addEventListener('activate', (event) => {
 +  const cacheWhitelist = []; // 現在有効なキャッシュ名
 +
 +  event.waitUntil(
 +    caches.keys().then((cacheNames) => {
 +      return Promise.all(
 +        cacheNames.map((cacheName) => {
 +          // 現在のバージョンに含まれていない(古い)キャッシュを削除
 +          if (cacheWhitelist.indexOf(cacheName) === -1) {
 +            console.log('古いキャッシュを削除:', cacheName);
 +            return caches.delete(cacheName);
 +          }
 +        })
 +      );
 +    })
 +    // すべてのキャッシュ削除が完了したら、クライアントへの制御を引き継ぐ
 +    .then(() => self.clients.claim())
 +  );
 +  
 +  event.waitUntil(
 +    // すべてのクライアントに更新完了を通知
 +    self.clients.claim().then(() => {
 +      self.clients.matchAll().then((clients) => {
 +        clients.forEach(client => {
 +          client.postMessage({ type: 'UPDATE_AVAILABLE' });
 +        });
 +      });
 +    })
 +  );
 }); });
 </code> </code>

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information