page lifecycle api 不提供电池状态读取能力,仅描述页面生命周期阶段;电池信息需通过 navigator.getbattery() 获取,返回包含 level、charging 等字段的 batterymanager 对象,但受 https、用户手势及浏览器策略限制。

Page Lifecycle API 本身不提供电池状态读取能力。它只负责描述网页当前所处的生命周期阶段(如 hidden、frozen、discarded),而电池信息需通过其他系统级 API 获取。两者必须配合使用,不能混为一谈。
浏览器里真正能读电池状态的是 navigator.getBattery()
这是目前唯一被主流浏览器(Chrome、Edge、Firefox)支持的电池状态获取方式。它返回一个 BatteryManager 对象,包含 level(剩余电量百分比)、charging(是否在充电)、chargingTime、dischargingTime 等字段。
注意:navigator.getBattery() 在部分新版本浏览器中已被移除或限制(例如 Chrome 120+ 默认禁用,仅 HTTPS + 用户手势后首次调用可触发)。实际使用前务必检查兼容性:
if ('getBattery' in navigator) {
navigator.getBattery().then(battery => {
console.log(`电量: ${battery.level * 100}%`, `充电中: ${battery.charging}`);
});
} else {
console.warn('浏览器不支持 battery API');
}
常见错误现象:
- 直接调用报
TypeError: navigator.getBattery is not a function→ 检查协议是否为 HTTPS,或是否在私密模式下运行 - 返回 Promise pending 不 resolve → 可能被浏览器策略拦截,需用户首次交互(如点击)后才允许访问
- Firefox 中需手动开启
dom.battery.enabled首选项(已逐步弃用)
结合 document.visibilityState 和 pagehide 判断页面是否“真后台”
仅靠电池电量不足以决定是否启用低功耗模式——用户可能开着网页但切到其他标签页,此时应暂停动画、停掉轮询;但如果页面只是被遮挡(如弹窗覆盖),仍处于 visible 状态,visibilitychange 不会触发。
更可靠的判断依据是生命周期事件:
-
visibilitychange:适合响应标签页切换、窗口最小化等可见性变化 -
pagehide:页面即将被隐藏(含卸载、冻结、Discard 前),比beforeunload更早、更可靠 -
freeze:页面进入 Frozen 阶段时触发(Chrome 117+ 支持),此时 JS 定时器、fetch、requestAnimationFrame 全部暂停,是启用轻量逻辑的最佳时机
示例:在页面冻结前清理资源
document.addEventListener('freeze', () => {
clearInterval(pollingTimer);
stopAnimationLoop();
// 此时页面尚未销毁,但已无 CPU 时间片,适合做轻量收尾
});
低功耗模式的实际切换点不在电池 API,而在生命周期阶段决策
真正影响耗电的是行为,不是电量数字本身。比如:
- 电量 20% 但页面在前台活跃 → 仍需响应用户操作,不能盲目降级 UI
- 电量 80% 但页面已
frozen→ 必须立即停止所有定时器和动画,否则唤醒失败或被丢弃 - 电量低 + 页面
hidden→ 可延长同步间隔、关闭 WebSocket 心跳、延迟非关键日志上报
推荐组合策略:
监听 navigator.getBattery() 获取初始状态,再用 pagehide / freeze / visibilitychange 事件驱动行为切换。不要在 setInterval 里轮询电池 —— 这本身就会增加耗电。
容易踩的坑:
- 把
visibilitychange当成电池事件用,结果用户插上电源但页面不可见,依然高耗电 - 在
freeze回调里发起新的fetch或setTimeout→ 浏览器会静默丢弃,且可能触发警告 - 依赖
charging字段做开关,却没处理chargingchange事件 → 插拔电源时无法实时响应
最常被忽略的一点:freeze 和 resume 是异步事件,且 resume 不保证恢复全部上下文(比如未完成的 Promise 会被丢弃)。任何依赖连续执行的状态管理,都得在 freeze 前序列化,在 resume 后校验重置。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










