Update index.html
Browse files- index.html +93 -18
index.html
CHANGED
@@ -753,10 +753,52 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
753 |
<div class="settings">
|
754 |
|
755 |
<h2>サービスワーカー設定</h2>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
756 |
<button class="combine-button" id="sw-register-btn">登録を開始</button>
|
757 |
<div class="combine-status" id="sw-status"></div>
|
758 |
<script>
|
759 |
-
|
760 |
const statusElem = document.getElementById('sw-status');
|
761 |
|
762 |
function updateStatus(message) {
|
@@ -779,35 +821,68 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
779 |
updateStatus('既存のService Workerをアンレジスター中...');
|
780 |
|
781 |
const registrations = await navigator.serviceWorker.getRegistrations();
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
updateStatus('Service Workerをアンレジスターしました。');
|
790 |
-
} else {
|
791 |
-
updateStatus('Service Workerのアンレジスターに失敗しました。');
|
792 |
-
}
|
793 |
-
} catch (unregErr) {
|
794 |
-
updateError('Service Workerのアンレジスター中に例外が発生しました。', unregErr);
|
795 |
-
return;
|
796 |
-
}
|
797 |
}
|
798 |
}
|
799 |
|
800 |
updateStatus('アンレジスター完了。新しいService Workerを登録中...');
|
801 |
|
802 |
-
// 少し待機してから新しいSWを登録
|
803 |
setTimeout(async () => {
|
804 |
try {
|
805 |
const newRegistration = await navigator.serviceWorker.register('/sw.js');
|
806 |
updateStatus('Service Workerが正常に登録されました。\n登録範囲: ' + newRegistration.scope);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
807 |
} catch (regErr) {
|
808 |
updateError('Service Workerの登録に失敗しました。', regErr);
|
809 |
}
|
810 |
-
},
|
811 |
} catch (err) {
|
812 |
updateError('Service Workerの処理中に致命的なエラーが発生しました。', err);
|
813 |
}
|
|
|
753 |
<div class="settings">
|
754 |
|
755 |
<h2>サービスワーカー設定</h2>
|
756 |
+
<div class="setting-item">
|
757 |
+
<label><input type="checkbox" id="sw-video" checked> 動画ファイル (/v.mp4)</label>
|
758 |
+
</div>
|
759 |
+
<div class="setting-item">
|
760 |
+
<label><input type="checkbox" id="sw-t-video" checked> 動画ファイル (/t/v.mp4)</label>
|
761 |
+
</div><br>
|
762 |
+
<div class="setting-item">
|
763 |
+
<label><input type="checkbox" id="sw-piano" checked> ピアノ音声 (/p.mp3)</label>
|
764 |
+
</div>
|
765 |
+
<div class="setting-item">
|
766 |
+
<label><input type="checkbox" id="sw-soprano" checked> ソプラノ音声 (/s.mp3)</label>
|
767 |
+
</div>
|
768 |
+
<div class="setting-item">
|
769 |
+
<label><input type="checkbox" id="sw-alto" checked> アルト音声 (/a.mp3)</label>
|
770 |
+
</div>
|
771 |
+
<div class="setting-item">
|
772 |
+
<label><input type="checkbox" id="sw-tenor" checked> テノール音声 (/t.mp3)</label>
|
773 |
+
</div>
|
774 |
+
<div class="setting-item">
|
775 |
+
<label><input type="checkbox" id="sw-combined" checked> 全体音声 (/k.mp3)</label>
|
776 |
+
</div><br>
|
777 |
+
<div class="setting-item">
|
778 |
+
<label><input type="checkbox" id="sw-t-piano" checked> ピアノ音声 (/t/p.mp3)</label>
|
779 |
+
</div>
|
780 |
+
<div class="setting-item">
|
781 |
+
<label><input type="checkbox" id="sw-t-soprano" checked> ソプラノ音声 (/t/s.mp3)</label>
|
782 |
+
</div>
|
783 |
+
<div class="setting-item">
|
784 |
+
<label><input type="checkbox" id="sw-t-alto" checked> アルト音声 (/t/a.mp3)</label>
|
785 |
+
</div>
|
786 |
+
<div class="setting-item">
|
787 |
+
<label><input type="checkbox" id="sw-t-tenor" checked> テノール音声 (/t/t.mp3)</label>
|
788 |
+
</div>
|
789 |
+
<div class="setting-item">
|
790 |
+
<label><input type="checkbox" id="sw-t-combined" checked> 全体音声 (/t/k.mp3)</label>
|
791 |
+
</div><br>
|
792 |
+
<div class="setting-item">
|
793 |
+
<label><input type="checkbox" id="sw-index" checked> インデックスファイル (/index.html)</label>
|
794 |
+
</div>
|
795 |
+
<div class="setting-item">
|
796 |
+
<label><input type="checkbox" id="sw-root" checked> ルートファイル (/)</label>
|
797 |
+
</div>
|
798 |
<button class="combine-button" id="sw-register-btn">登録を開始</button>
|
799 |
<div class="combine-status" id="sw-status"></div>
|
800 |
<script>
|
801 |
+
document.getElementById('sw-register-btn').addEventListener('click', async () => {
|
802 |
const statusElem = document.getElementById('sw-status');
|
803 |
|
804 |
function updateStatus(message) {
|
|
|
821 |
updateStatus('既存のService Workerをアンレジスター中...');
|
822 |
|
823 |
const registrations = await navigator.serviceWorker.getRegistrations();
|
824 |
+
for (const registration of registrations) {
|
825 |
+
try {
|
826 |
+
await registration.unregister();
|
827 |
+
updateStatus('Service Workerをアンレジスターしました。');
|
828 |
+
} catch (unregErr) {
|
829 |
+
updateError('Service Workerのアンレジスター中に例外が発生しました。', unregErr);
|
830 |
+
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
831 |
}
|
832 |
}
|
833 |
|
834 |
updateStatus('アンレジスター完了。新しいService Workerを登録中...');
|
835 |
|
|
|
836 |
setTimeout(async () => {
|
837 |
try {
|
838 |
const newRegistration = await navigator.serviceWorker.register('/sw.js');
|
839 |
updateStatus('Service Workerが正常に登録されました。\n登録範囲: ' + newRegistration.scope);
|
840 |
+
|
841 |
+
// チェックボックスの状態からファイルリストを作成
|
842 |
+
const fileMap = {
|
843 |
+
'sw-video': '/v.mp4',
|
844 |
+
'sw-t-video': '/t/v.mp4',
|
845 |
+
'sw-piano': '/p.mp3',
|
846 |
+
'sw-soprano': '/s.mp3',
|
847 |
+
'sw-alto': '/a.mp3',
|
848 |
+
'sw-tenor': '/t.mp3',
|
849 |
+
'sw-combined': '/k.mp3',
|
850 |
+
'sw-t-piano': '/t/p.mp3',
|
851 |
+
'sw-t-soprano': '/t/s.mp3',
|
852 |
+
'sw-t-alto': '/t/a.mp3',
|
853 |
+
'sw-t-tenor': '/t/t.mp3',
|
854 |
+
'sw-t-combined': '/t/k.mp3',
|
855 |
+
'sw-index': '/index.html',
|
856 |
+
'sw-root': '/',
|
857 |
+
};
|
858 |
+
|
859 |
+
// チェックされているものだけ抽出
|
860 |
+
const filesToCache = [];
|
861 |
+
const checkboxStates = {};
|
862 |
+
for (const [id, url] of Object.entries(fileMap)) {
|
863 |
+
const checkbox = document.getElementById(id);
|
864 |
+
if (!checkbox) continue;
|
865 |
+
checkboxStates[id] = checkbox.checked;
|
866 |
+
if (checkbox.checked) {
|
867 |
+
filesToCache.push(url);
|
868 |
+
}
|
869 |
+
}
|
870 |
+
|
871 |
+
// SWがコントロール中ならメッセージ送信
|
872 |
+
if (navigator.serviceWorker.controller) {
|
873 |
+
navigator.serviceWorker.controller.postMessage({
|
874 |
+
type: 'CACHE_FILES',
|
875 |
+
files: filesToCache,
|
876 |
+
checkboxStates: checkboxStates,
|
877 |
+
});
|
878 |
+
updateStatus('キャッシュ更新のメッセージをサービスワーカーに送信しました。');
|
879 |
+
} else {
|
880 |
+
updateStatus('サービスワーカーがコントロール中ではありません。キャッシュ更新メッセージは送信できません。');
|
881 |
+
}
|
882 |
} catch (regErr) {
|
883 |
updateError('Service Workerの登録に失敗しました。', regErr);
|
884 |
}
|
885 |
+
}, 500);
|
886 |
} catch (err) {
|
887 |
updateError('Service Workerの処理中に致命的なエラーが発生しました。', err);
|
888 |
}
|