获取电池级JavaScript

获取电池级JavaScript,javascript,battery,batterylevel,Javascript,Battery,Batterylevel,/!\使用window.navigator.battery和此问题现在不值得检查谢谢/\ 我想得到当前系统的电池电量。以下是我打算得到的结果: 如果桌面(无电池) 电池电量:100% 如果是笔记本电脑 电池电量:XXX%(取决于电量) 所以我尝试了Mozilla基金会的片段在我的 ./P>中。 问题:运行Chrome 20+版本(目前为46),我在控制台上仍然有一个错误: 未捕获的TypeError:无法读取未定义的属性“addEventListener” 因此,我所理解的是,用假定的电池电量实

/!\使用window.navigator.battery和此问题现在不值得检查谢谢/\

我想得到当前系统的电池电量。以下是我打算得到的结果:

如果桌面(无电池) 电池电量:100%

如果是笔记本电脑 电池电量:XXX%(取决于电量)

所以我尝试了Mozilla基金会的片段在我的<强> ./P>中。 问题:运行Chrome 20+版本(目前为46),我在控制台上仍然有一个错误:

未捕获的TypeError:无法读取未定义的属性“addEventListener”

因此,我所理解的是,用假定的电池电量实例化的对象
电池
没有返回任何东西

有人已经知道了吗

当这个代码段工作时,我的算法的要点是定义用户在剩余电池电量方面不能执行的操作。例如,我不希望用户进行可能会将电池电量降低到临界点并导致临界操作失败的繁重操作。

来自:

此功能已从Web标准中删除。尽管某些浏览器可能仍然支持它,但它正在被删除。不要在旧项目或新项目中使用它。使用它的网页或Web应用程序可能随时中断

battery
属性已弃用,并已被返回电池的方法替换。不过,它的支持仍然是片面的


警告

不要在生产中使用以下答案,因为它已经被使用了。由于以下原因,规范将进行返工,因此预计会出现更改和故障

回答

为了回答我自己的问题,感谢@Quentin提供给我的文档的帮助,我使用了
BatteryManager.level
函数promise
Navigator.getBattery()
,实现了我的目标。可以在此处找到提供工作代码段的链接:

以下JSFiddle在控制台(F12)中显示剩余电池的值(我还无法验证桌面上的输出,因此如果它在桌面上不工作,请更正我):

JavaScript

navigator.getBattery().then(function(battery) {

    var level = battery.level;

    console.log(level);
});

event.target.level
是事件处理程序中的级别值

navigator.getBattery().then((battery) => {

    battery.ondischargingtimechange = (event) => { 
       console.warn(`Discharging : `, event.target.level) 
    };

    battery.onchargingtimechange = (event) => { 
       console.info(`Charging : `, event.target.level) ;
    };
});


Navigator.getBattery()现已过时。尽管它在某些浏览器中仍然可以工作,但不鼓励使用它,因为它可以随时删除。

可以工作,包括演示和代码
我向你推荐这本书。
您可以在中找到演示或代码
它非常有用,并提供了大量有关
电池。 可以免费使用。
单击下面的按钮以显示被截断的StackOverflow代码
(函数(){
让batterySupported=document.getElementById(“电池支持”),
batteryLevel=document.getElementById(“电池级别”),
chargingStatus=document.getElementById(“充电状态”),
电池充电=document.getElementById(“电池充电”),
batteryDischarged=document.getElementById(“电池已放电”);
让成功=功能(电池){
如果(电池){
函数setStatus(){
控制台日志(“设置状态”);
batteryLevel.innerHTML=Math.round(battery.level*100)+“%”;
chargingStatus.innerHTML=(电池充电)?“”:“不是”;
batteryCharged.innerHTML=(battery.chargingTime=“无穷大”)?
“无穷大”:parseInt(电池充电时间/60,10);
batteryDischarged.innerHTML=(battery.dischargingTime=“无穷大”)
?“无穷大”:parseInt(电池放电时间/60,10);
}
//设置初始状态
setStatus();
//设置事件
battery.addEventListener(“级别更改”,设置状态,错误);
battery.addEventListener(“chargingchange”,设置状态,错误);
battery.addEventListener(“chargingtimechange”,setStatus,false);
battery.addEventListener(“放电时间变化”,设置状态,错误);
}否则{
抛出新错误(“设备/计算机上不支持电池API”);
}
};
设noGood=函数(错误){
batterySupported.innerHTML=error.message;
};
navigator.getBattery()//返回一个承诺
.然后(成功)
.捕获(不好);
})();
@导入url('https://fonts.googleapis.com/css2? 
家庭=机器人:wght@300&显示=交换';
/*通用字体样式*/
html{
字体系列:“Roboto”,无衬线;
身高:100%;
}
身体{
字体系列:“Roboto”,无衬线;
}
img{
边界:无;
垂直对齐:中间对齐;
}
/*基本元素样式*/
a{
颜色:#0366d6;
文字装饰:无;
}
a:悬停{
文字装饰:下划线;
}
html{
颜色:#000;
}
身体{
填充顶部:20px;
}
身体{
边缘底部:30px;
}
保险商实验室{
利润率:10px0;
}
/*结构*/
.集装箱{
背景:#fff;
边界顶部:无;
文本对齐:居中;
}
#电池支持{
颜色:#f00;
}

电池API
电池API演示
电池API的演示

电池电量为

电池状态正在充电

电池将完全充电 分钟

电池将在短时间内放电 分钟

所有代码都可以在中找到


我刚刚发现法语文档不是最新的,因为我将URL切换到了en,并且我实际上看到了depacketed消息错误。请注意,您指向JSFIDLE的链接指向主页,不是一个具体的小提琴来演示这个问题。##Chrome 60:##Input>window.navigator.battery------Outputnavigator.getBattery()。然后(battery=>console.log(battery.level))这个答案与@Zeratops'有什么不同?这是一个真实的答案