roots / templates /index.html
haepada's picture
Upload index.html
562e9b6 verified
raw
history blame
3.34 kB
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>디지털 굿판</title>
<!-- PWA 메타 태그 -->
<link rel="manifest" href="/static/manifest.json">
<meta name="theme-color" content="#000000">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="디지털 굿판">
<link rel="apple-touch-icon" href="/static/icons/icon-152x152.png">
<script>
// 화면 꺼짐 방지
async function preventSleep() {
try {
if ('wakeLock' in navigator) {
const wakeLock = await navigator.wakeLock.request('screen');
console.log('화면 켜짐 유지 활성화');
// 화면이 다시 활성화될 때 wakeLock 재요청
document.addEventListener('visibilitychange', async () => {
if (document.visibilityState === 'visible') {
await preventSleep();
}
});
}
} catch (err) {
console.log('화면 켜짐 유지 실패:', err);
}
}
// 앱 상태 관리
class AppState {
static async save(state) {
try {
localStorage.setItem('appState', JSON.stringify(state));
} catch (err) {
console.error('상태 저장 실패:', err);
}
}
static async load() {
try {
const state = localStorage.getItem('appState');
return state ? JSON.parse(state) : null;
} catch (err) {
console.error('상태 복원 실패:', err);
return null;
}
}
}
// 초기화
window.addEventListener('load', async () => {
// PWA 설치 확인
if ('serviceWorker' in navigator) {
try {
const registration = await navigator.serviceWorker.register('/static/service-worker.js');
console.log('ServiceWorker 등록 성공:', registration.scope);
} catch (err) {
console.log('ServiceWorker 등록 실패:', err);
}
}
// 화면 켜짐 유지
await preventSleep();
// 상태 복원
const savedState = await AppState.load();
if (savedState) {
// Gradio 앱 상태 복원 로직
window.gradioApp().querySelector('#component-0').value = savedState;
}
});
// 상태 저장
window.addEventListener('beforeunload', () => {
const currentState = window.gradioApp().querySelector('#component-0').value;
AppState.save(currentState);
});
</script>
</head>
<body>
<div id="gradio-app"></div>
</body>
</html>