Update index.html
Browse files- index.html +22 -8
index.html
CHANGED
@@ -1021,6 +1021,14 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|
1021 |
statusElem.textContent = errorMsg;
|
1022 |
}
|
1023 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1024 |
if (!('serviceWorker' in navigator)) {
|
1025 |
updateError('このブラウザはService Workerに対応していません。');
|
1026 |
return;
|
@@ -1028,21 +1036,30 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|
1028 |
|
1029 |
try {
|
1030 |
const reg = await navigator.serviceWorker.getRegistration();
|
|
|
1031 |
if (reg) {
|
1032 |
updateStatus('Service Workerは既に登録されています。更新を確認中...');
|
1033 |
-
|
|
|
|
|
1034 |
reg.onupdatefound = () => {
|
1035 |
const newSW = reg.installing;
|
1036 |
if (newSW) {
|
1037 |
newSW.onstatechange = () => {
|
1038 |
-
if (newSW.state === 'installed'
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
|
|
|
|
|
|
|
|
1042 |
}
|
1043 |
};
|
1044 |
}
|
1045 |
};
|
|
|
|
|
1046 |
} else {
|
1047 |
updateStatus('Service Workerは未登録です。');
|
1048 |
registerBtn.textContent = '登録とキャッシュ';
|
@@ -1060,14 +1077,11 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|
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);
|
|
|
1021 |
statusElem.textContent = errorMsg;
|
1022 |
}
|
1023 |
|
1024 |
+
// オフラインならボタンを非表示
|
1025 |
+
if (!navigator.onLine) {
|
1026 |
+
updateStatus('オフラインのため操作できません。');
|
1027 |
+
return;
|
1028 |
+
}
|
1029 |
+
|
1030 |
+
registerBtn.style.display = 'inline-block';
|
1031 |
+
|
1032 |
if (!('serviceWorker' in navigator)) {
|
1033 |
updateError('このブラウザはService Workerに対応していません。');
|
1034 |
return;
|
|
|
1036 |
|
1037 |
try {
|
1038 |
const reg = await navigator.serviceWorker.getRegistration();
|
1039 |
+
|
1040 |
if (reg) {
|
1041 |
updateStatus('Service Workerは既に登録されています。更新を確認中...');
|
1042 |
+
const updatePromise = reg.update();
|
1043 |
+
|
1044 |
+
// 即座にupdate処理を開始
|
1045 |
reg.onupdatefound = () => {
|
1046 |
const newSW = reg.installing;
|
1047 |
if (newSW) {
|
1048 |
newSW.onstatechange = () => {
|
1049 |
+
if (newSW.state === 'installed') {
|
1050 |
+
if (navigator.serviceWorker.controller) {
|
1051 |
+
updateStatus('新しいService Workerがインストールされました。更新が必要です!');
|
1052 |
+
registerBtn.textContent = '更新を開始';
|
1053 |
+
registerBtn.disabled = false;
|
1054 |
+
} else {
|
1055 |
+
updateStatus('初回インストール完了。');
|
1056 |
+
}
|
1057 |
}
|
1058 |
};
|
1059 |
}
|
1060 |
};
|
1061 |
+
|
1062 |
+
await updatePromise;
|
1063 |
} else {
|
1064 |
updateStatus('Service Workerは未登録です。');
|
1065 |
registerBtn.textContent = '登録とキャッシュ';
|
|
|
1077 |
for (const reg of regs) {
|
1078 |
await reg.unregister();
|
1079 |
}
|
|
|
1080 |
updateStatus('新しいService Workerを登録中...');
|
1081 |
await navigator.serviceWorker.register('/sw.js');
|
|
|
1082 |
updateStatus('登録完了。ページをリロードしてキャッシュを有効化します。');
|
1083 |
registerBtn.textContent = 'ページをリロード';
|
1084 |
registerBtn.disabled = false;
|
|
|
1085 |
registerBtn.onclick = () => location.reload();
|
1086 |
} catch (err) {
|
1087 |
updateError('Service Workerの登録に失敗しました。', err);
|