soiz1 commited on
Commit
dec56b4
·
1 Parent(s): 5a2ae03

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +24 -76
index.html CHANGED
@@ -1026,108 +1026,56 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1026
  return;
1027
  }
1028
 
1029
- // 更新フラグ
1030
- let hasUpdate = false;
1031
-
1032
  try {
1033
- const registration = await navigator.serviceWorker.getRegistration();
1034
- if (registration) {
1035
  updateStatus('Service Workerは既に登録されています。更新を確認中...');
1036
-
1037
- registration.onupdatefound = () => {
1038
- const newWorker = registration.installing;
1039
- if (newWorker) {
1040
- newWorker.onstatechange = () => {
1041
- if (newWorker.state === 'installed') {
1042
- if (navigator.serviceWorker.controller) {
1043
- // すでに別のSWがアクティブ ⇒ 更新あり
1044
- updateStatus('新しいService Workerがインストールされました。更新が利用可能です。');
1045
- hasUpdate = true;
1046
- registerBtn.textContent = '更新を開始';
1047
- registerBtn.disabled = false;
1048
- } else {
1049
- updateStatus('Service Workerが初めてインストールされました。');
1050
- }
1051
  }
1052
  };
1053
  }
1054
  };
1055
-
1056
- // 明示的に更新を確認
1057
- await registration.update();
1058
  } else {
1059
- updateStatus('Service Workerはまだ登録されていません。');
1060
  registerBtn.textContent = '登録とキャッシュ';
1061
  registerBtn.disabled = false;
1062
  }
1063
  } catch (err) {
1064
- updateError('Service Workerの初期確認中にエラーが発生しました。', err);
1065
  }
1066
 
1067
- // ボタンクリック時の動作
1068
  registerBtn.addEventListener('click', async () => {
1069
  registerBtn.disabled = true;
1070
- const fileMap = {
1071
- 'sw-video': '/v.mp4',
1072
- 'sw-t-video': '/t/v.mp4',
1073
- 'sw-piano': '/p.mp3',
1074
- 'sw-soprano': '/s.mp3',
1075
- 'sw-alto': '/a.mp3',
1076
- 'sw-tenor': '/t.mp3',
1077
- 'sw-combined': '/k.mp3',
1078
- 'sw-t-piano': '/t/p.mp3',
1079
- 'sw-t-soprano': '/t/s.mp3',
1080
- 'sw-t-alto': '/t/a.mp3',
1081
- 'sw-t-tenor': '/t/t.mp3',
1082
- 'sw-t-combined': '/t/k.mp3',
1083
- 'sw-index': '/index.html',
1084
- 'sw-root': '/',
1085
- };
1086
-
1087
- function getSelectedFiles() {
1088
- const filesToCache = [];
1089
- const checkboxStates = {};
1090
- for (const [id, url] of Object.entries(fileMap)) {
1091
- const checkbox = document.getElementById(id);
1092
- if (checkbox) {
1093
- checkboxStates[id] = checkbox.checked;
1094
- if (checkbox.checked) filesToCache.push(url);
1095
- }
1096
- }
1097
- return { filesToCache, checkboxStates };
1098
- }
1099
-
1100
  try {
1101
  updateStatus('既存のService Workerをアンレジスター中...');
1102
- const registrations = await navigator.serviceWorker.getRegistrations();
1103
- for (const registration of registrations) {
1104
- await registration.unregister();
1105
  }
1106
 
1107
  updateStatus('新しいService Workerを登録中...');
1108
- const newReg = await navigator.serviceWorker.register('/sw.js');
1109
- updateStatus('登録成功: ' + newReg.scope);
1110
 
1111
- // 少し待ってcontrollerを取得
1112
- setTimeout(() => {
1113
- if (navigator.serviceWorker.controller) {
1114
- const { filesToCache, checkboxStates } = getSelectedFiles();
1115
- navigator.serviceWorker.controller.postMessage({
1116
- type: 'CACHE_FILES',
1117
- files: filesToCache,
1118
- checkboxStates,
1119
- });
1120
- updateStatus('キャッシュ更新メッセージを送信しました。');
1121
- } else {
1122
- updateStatus('Service Workerがコントロール中ではありません。');
1123
- }
1124
- }, 1000);
1125
  } catch (err) {
1126
- updateError('Service Workerの再登録に失敗しました。', err);
1127
  }
1128
  });
1129
  });
1130
  </script>
 
1131
  </div>
1132
  <div class="container">
1133
  <div class="audio-controls">
 
1026
  return;
1027
  }
1028
 
 
 
 
1029
  try {
1030
+ const reg = await navigator.serviceWorker.getRegistration();
1031
+ if (reg) {
1032
  updateStatus('Service Workerは既に登録されています。更新を確認中...');
1033
+ await reg.update();
1034
+ reg.onupdatefound = () => {
1035
+ const newSW = reg.installing;
1036
+ if (newSW) {
1037
+ newSW.onstatechange = () => {
1038
+ if (newSW.state === 'installed' && navigator.serviceWorker.controller) {
1039
+ updateStatus('新しいService Workerがインストールされました。');
1040
+ registerBtn.textContent = '更新を開始';
1041
+ registerBtn.disabled = false;
 
 
 
 
 
 
1042
  }
1043
  };
1044
  }
1045
  };
 
 
 
1046
  } else {
1047
+ updateStatus('Service Workerは未登録です。');
1048
  registerBtn.textContent = '登録とキャッシュ';
1049
  registerBtn.disabled = false;
1050
  }
1051
  } catch (err) {
1052
+ updateError('Service Workerの確認中にエラーが発生しました。', err);
1053
  }
1054
 
 
1055
  registerBtn.addEventListener('click', async () => {
1056
  registerBtn.disabled = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1057
  try {
1058
  updateStatus('既存のService Workerをアンレジスター中...');
1059
+ const regs = await navigator.serviceWorker.getRegistrations();
1060
+ for (const reg of regs) {
1061
+ await reg.unregister();
1062
  }
1063
 
1064
  updateStatus('新しいService Workerを登録中...');
1065
+ await navigator.serviceWorker.register('/sw.js');
 
1066
 
1067
+ updateStatus('登録完了。ページをリロードしてキャッシュを有効化します。');
1068
+ registerBtn.textContent = 'ページをリロード';
1069
+ registerBtn.disabled = false;
1070
+
1071
+ registerBtn.onclick = () => location.reload();
 
 
 
 
 
 
 
 
 
1072
  } catch (err) {
1073
+ updateError('Service Workerの登録に失敗しました。', err);
1074
  }
1075
  });
1076
  });
1077
  </script>
1078
+
1079
  </div>
1080
  <div class="container">
1081
  <div class="audio-controls">