soiz1 commited on
Commit
ade4e6b
·
1 Parent(s): 9d43c0f

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +54 -25
index.html CHANGED
@@ -931,7 +931,6 @@ document.addEventListener('DOMContentLoaded', function() {
931
  window.alert(`${message}\n\nエラー詳細: ${error.message}`);
932
  }
933
 
934
- // サービスワーカー登録関数
935
  async function registerServiceWorker() {
936
  const statusElement = document.getElementById('sw-status');
937
  const registerBtn = document.getElementById('sw-register-btn');
@@ -955,15 +954,14 @@ async function registerServiceWorker() {
955
  'sw-t-soprano': document.getElementById('sw-t-soprano').checked,
956
  'sw-t-alto': document.getElementById('sw-t-alto').checked,
957
  'sw-t-tenor': document.getElementById('sw-t-tenor').checked,
958
- 'sw-t-combined': document.getElementById('sw-t-combined').checked
 
 
959
  };
960
 
961
  // チェックされたファイルを収集
962
  const filesToCache = [];
963
 
964
- // index.htmlは常に含める
965
- filesToCache.push('/index.html');
966
-
967
  // 通常のメディアファイル
968
  if (checkboxStates['sw-video']) filesToCache.push('/v.mp4');
969
  if (checkboxStates['sw-piano']) filesToCache.push('/p.mp3');
@@ -986,41 +984,49 @@ async function registerServiceWorker() {
986
  // Service Workerを登録
987
  const registration = await navigator.serviceWorker.register('/service-worker.js');
988
 
989
- // 進捗表示用のタイマー
990
- let progress = 0;
991
- const progressInterval = setInterval(() => {
992
- progress += 5;
993
- if (progress < 100) {
994
- statusElement.textContent = `サービスワーカーを登録中... ${progress}%`;
995
- }
996
- }, 300);
997
-
998
  // Service Workerがアクティブになるのを待つ
999
- await new Promise(resolve => {
1000
  if (registration.active) {
1001
  resolve();
1002
  } else {
1003
- registration.addEventListener('updatefound', () => {
1004
- const newWorker = registration.installing;
1005
- newWorker.addEventListener('statechange', () => {
1006
- if (newWorker.state === 'activated') {
1007
  resolve();
 
 
1008
  }
1009
  });
1010
- });
 
 
 
 
 
 
 
 
 
 
 
1011
  }
1012
  });
1013
 
1014
- clearInterval(progressInterval);
1015
-
1016
- // Service Workerにキャッシュするファイルを送信
1017
  registration.active.postMessage({
1018
  type: 'CACHE_FILES',
1019
  files: filesToCache,
1020
  checkboxStates: checkboxStates
1021
  });
1022
 
1023
- statusElement.textContent = "サービスワーカーが正常に登録されました";
 
 
 
 
 
 
1024
  registerBtn.disabled = false;
1025
  } catch (error) {
1026
  console.error('Service Worker登録エラー:', error);
@@ -1028,7 +1034,30 @@ async function registerServiceWorker() {
1028
  registerBtn.disabled = false;
1029
  }
1030
  }
1031
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1032
  async function restoreCheckboxStates() {
1033
  try {
1034
  const cache = await caches.open('settings-cache');
 
931
  window.alert(`${message}\n\nエラー詳細: ${error.message}`);
932
  }
933
 
 
934
  async function registerServiceWorker() {
935
  const statusElement = document.getElementById('sw-status');
936
  const registerBtn = document.getElementById('sw-register-btn');
 
954
  'sw-t-soprano': document.getElementById('sw-t-soprano').checked,
955
  'sw-t-alto': document.getElementById('sw-t-alto').checked,
956
  'sw-t-tenor': document.getElementById('sw-t-tenor').checked,
957
+ 'sw-t-combined': document.getElementById('sw-t-combined').checked,
958
+ 'sw-index': document.getElementById('sw-index').checked,
959
+ 'sw-root': document.getElementById('sw-root').checked
960
  };
961
 
962
  // チェックされたファイルを収集
963
  const filesToCache = [];
964
 
 
 
 
965
  // 通常のメディアファイル
966
  if (checkboxStates['sw-video']) filesToCache.push('/v.mp4');
967
  if (checkboxStates['sw-piano']) filesToCache.push('/p.mp3');
 
984
  // Service Workerを登録
985
  const registration = await navigator.serviceWorker.register('/service-worker.js');
986
 
 
 
 
 
 
 
 
 
 
987
  // Service Workerがアクティブになるのを待つ
988
+ await new Promise((resolve, reject) => {
989
  if (registration.active) {
990
  resolve();
991
  } else {
992
+ const worker = registration.installing || registration.waiting;
993
+ if (worker) {
994
+ worker.addEventListener('statechange', () => {
995
+ if (worker.state === 'activated') {
996
  resolve();
997
+ } else if (worker.state === 'rejected') {
998
+ reject(new Error('Service Workerの登録が拒否されました'));
999
  }
1000
  });
1001
+ } else {
1002
+ registration.addEventListener('updatefound', () => {
1003
+ const newWorker = registration.installing;
1004
+ newWorker.addEventListener('statechange', () => {
1005
+ if (newWorker.state === 'activated') {
1006
+ resolve();
1007
+ } else if (newWorker.state === 'rejected') {
1008
+ reject(new Error('Service Workerの登録が拒否されました'));
1009
+ }
1010
+ });
1011
+ });
1012
+ }
1013
  }
1014
  });
1015
 
1016
+ // キャッシュするファイルをService Workerに送信
 
 
1017
  registration.active.postMessage({
1018
  type: 'CACHE_FILES',
1019
  files: filesToCache,
1020
  checkboxStates: checkboxStates
1021
  });
1022
 
1023
+ // キャッシュが完了するのを待つ
1024
+ statusElement.textContent = "ファイルをキャッシュ中...";
1025
+
1026
+ // キャッシュが完了したか確認する
1027
+ await verifyCache(filesToCache);
1028
+
1029
+ statusElement.textContent = "サービスワーカーが正常に登録され、ファイルがキャッシュされました";
1030
  registerBtn.disabled = false;
1031
  } catch (error) {
1032
  console.error('Service Worker登録エラー:', error);
 
1034
  registerBtn.disabled = false;
1035
  }
1036
  }
1037
+ async function verifyCache(filesToCache) {
1038
+ const maxAttempts = 10;
1039
+ const delay = 500; // 500msごとに確認
1040
+
1041
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
1042
+ const cache = await caches.open('media-player-cache-v1');
1043
+ const cachedRequests = await cache.keys();
1044
+ const cachedUrls = cachedRequests.map(request => request.url.replace(location.origin, ''));
1045
+
1046
+ // ��べてのファイルがキャッシュされているか確認
1047
+ const allCached = filesToCache.every(file => cachedUrls.includes(file));
1048
+
1049
+ if (allCached) {
1050
+ return true;
1051
+ }
1052
+
1053
+ // 最後の試行でなければ待機
1054
+ if (attempt < maxAttempts) {
1055
+ await new Promise(resolve => setTimeout(resolve, delay));
1056
+ }
1057
+ }
1058
+
1059
+ throw new Error('キャッシュが完了しませんでした');
1060
+ }
1061
  async function restoreCheckboxStates() {
1062
  try {
1063
  const cache = await caches.open('settings-cache');