现代浏览器已废弃 Battery Status API,Chrome 80+、Firefox 109+默认禁用或移除,Safari从未支持;navigator.getBattery() 在HTTPS下仍报SecurityError或返回undefined,纯前端无标准替代方案。
现代浏览器已废弃 Battery Status API,无法可靠获取电池信息。 Chrome 从 80 版本起移除支持,Firefox 在 109 版本后默认禁用,Safari 从未实现。你看到的旧教程或示例代码现在基本都失效了。
navigator.getBattery() 总是报错或返回 undefined这是最常见现象:调用后 Promise 拒绝、抛出 SecurityError,或直接返回 undefined。根本原因不是代码写错,而是浏览器策略变更:
navigator.getBattery() 不再触发权限提示——它被静默禁用,而非拒绝授权纯前端 HTML/JS 已无标准途径。可行路径取决于你的实际场景:
chrome.runtime.sendNativeMessage 调用本地 Native Host 程序(如用 Python 读取 /sys/class/power_supply/BAT0/capacity),但需用户手动安装和授权,跨平台成本高app.isPackaged + powerMonitor 模块监听 onBatteryStatus 事件,注意 Windows/macOS/Linux 返回字段不同(如 isBatteryPowered vs dischargingTime)getBattery()
MDN 页面仍保留文档,但底部小字写着 “Deprecated. Not for use in new websites.”。实测中:
立即学习“前端免费学习笔记(深入)”;
navigator.getBattery() 直接返回 Promise.reject(new DOMException("Operation is insecure."))
about:config 中设 dom.battery.enabled = true,也只返回空 BatteryManager 对象(level 恒为 1,charging 恒为 true)if ('getBattery' in navigator) 已失去意义——它存在但不可用真正要做的,不是修复某个函数调用,而是放弃依赖电池状态做核心逻辑。比如“低电量自动休眠”这类功能,必须降级为基于时间、用户交互或网络状态的启发式判断。浏览器把这块关死了,就没留缝。