概述页面切换与关闭场景需要正确暂停与持久化状态。本文展示基于 `visibilitychange/pagehide/beforeunload` 的可靠策略。可见性与暂停document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden') { // 暂停定时器或流式处理 } else { // 恢复任务 } }); 卸载前持久化与恢复function openDB(name) { return new Promise((resolve, reject) => { const r = indexedDB.open(name, 1); r.onupgradeneeded = () => { const db = r.result; if (!db.objectStoreNames.contains('state')) db.createObjectStore('state'); }; r.onsuccess = () => resolve(r.result); r.onerror = () => reject(r.error); }); } async function saveState(key, data) { const db = await openDB('lifecycle'); const tx = db.transaction('state', 'readwrite'); tx.objectStore('state').put(data, key); await new Promise((resolve, reject) => { tx.oncomplete = resolve; tx.onerror = () => reject(tx.error); }); db.close(); } async function loadState(key) { const db = await openDB('lifecycle'); const tx = db.transaction('state', 'readonly'); const req = tx.objectStore('state').get(key); const val = await new Promise((resolve, reject) => { req.onsuccess = () => resolve(req.result); req.onerror = () => reject(req.error); }); db.close(); return val; } addEventListener('pagehide', () => { saveState('progress', { ts: Date.now() }); }); addEventListener('beforeunload', () => { saveState('progress', { ts: Date.now() }); });

发表评论 取消回复