Battery Status API 已被废弃,因隐私安全风险被主流浏览器移除;应通过页面可见性、beforeunload、定时保存和网络状态监听等组合策略实现防丢失。

HTML5 的 Battery Status API(电池状态 API)本身已被废弃且不再受现代浏览器支持,无法用于检测用户设备电量或触发保存逻辑。自 2016 年起,Chrome、Firefox、Edge 等主流浏览器陆续移除了该 API,目前所有新版本均不提供 navigator.getBattery() 方法,调用会返回 Promise.reject() 或直接报错。
为什么 BatteryAPI 不可用
该 API 因存在隐私与安全风险被弃用:攻击者可通过频繁读取电量变化推测用户行为(如是否在后台运行、是否使用移动网络)、设备型号甚至活跃时段。W3C 已将其从标准中删除,MDN 明确标注为 Deprecated 和 Non-standard。
替代方案:用页面可见性 + 网络状态 + 定时保存组合实现“防丢失”
虽然无法精确感知电池耗尽,但可结合用户实际易失场景(切出页面、断网、关闭标签页、长时间无操作)主动保存编辑内容:
-
监听页面可见性变化:用户切换到其他标签页或最小化窗口时,立即保存草稿
示例:document.addEventListener('visibilitychange', () => { if (document.hidden) saveDraft(); }) -
监听 beforeunload 事件:用户关闭页面或刷新前弹窗提示,或静默保存(需注意:此事件中异步请求可能被中断,建议用
localStorage同步写入) -
定时自动保存(如每 30 秒):对长文本编辑器(如 Markdown、富文本),用
setInterval持续同步到localStorage或 IndexedDB -
监听网络状态变化:当
navigator.onLine === false时降级为本地存储,恢复后尝试同步到服务端
轻量级实现示例(基于 localStorage)
适用于表单、文本域等常见编辑场景:
// 绑定输入事件并节流保存
const editor = document.getElementById('my-editor');
let saveTimer;
editor.addEventListener('input', () => {
clearTimeout(saveTimer);
saveTimer = setTimeout(() => {
localStorage.setItem('draft-content', editor.value);
}, 800);
});
// 页面隐藏时强制保存
document.addEventListener('visibilitychange', () => {
if (document.hidden) {
localStorage.setItem('draft-content', editor.value);
}
});
// 页面加载时恢复草稿
window.addEventListener('load', () => {
const draft = localStorage.getItem('draft-content');
if (draft && editor.value === '') {
editor.value = draft;
}
});
进阶建议
若需更可靠的数据持久化:
- 使用
IndexedDB替代localStorage存储大段内容或结构化草稿(支持事务、容量更大) - 添加时间戳和版本标识,避免跨设备覆盖;服务端可提供“恢复最近 3 次草稿”功能
- 对关键操作(如发布前)增加二次确认,并在提交失败时自动回滚至本地最新备份
不依赖已失效的电池 API,而是聚焦真实风险点——用户离开、意外关闭、网络中断——才是保障编辑内容不丢失的务实做法。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











