概述页面切换与关闭场景需要正确暂停与持久化状态。本文展示基于 `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() }); });

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部