Javascript Chrome扩展的BatteryStatus API不工作
我正在尝试为chrome浏览器创建一个扩展,它将显示系统的电池电量(并与其他东西进行耦合) 起初,我只是尝试使用简单的画布显示电池电量,但它似乎不起作用 清单:Javascript Chrome扩展的BatteryStatus API不工作,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在尝试为chrome浏览器创建一个扩展,它将显示系统的电池电量(并与其他东西进行耦合) 起初,我只是尝试使用简单的画布显示电池电量,但它似乎不起作用 清单: { "manifest_version": 2, "name": "Battery", "description": "This extension shows the battery stats of the current device.", "version": "1.0", "
{
"manifest_version": 2,
"name": "Battery",
"description": "This extension shows the battery stats of the current device.",
"version": "1.0",
"browser_action": {
"default_icon": "battery_full.png",
"default_title": "Click Here!"
},
"background": {
"scripts": ["icon_changer.js"]
}
}
var battery;
navigator.getBattery()
.then(function (b) {
battery = b;
}
);
function drawIcon() {
var clockCanvas = document.createElement("canvas");
clockCanvas.height = 19;
clockCanvas.width = 19;
var clockContext = clockCanvas.getContext("2d");
clockContext.textAlign = "center";
clockContext.textBaseline = "middle";
clockContext.font = "9px Arial";
clockContext.fillText(battery.level, 9, 10);
chrome.browserAction.setIcon({
imageData: clockContext.getImageData(0, 0, 19, 19)
});
}
drawIcon();
JavaScript:
{
"manifest_version": 2,
"name": "Battery",
"description": "This extension shows the battery stats of the current device.",
"version": "1.0",
"browser_action": {
"default_icon": "battery_full.png",
"default_title": "Click Here!"
},
"background": {
"scripts": ["icon_changer.js"]
}
}
var battery;
navigator.getBattery()
.then(function (b) {
battery = b;
}
);
function drawIcon() {
var clockCanvas = document.createElement("canvas");
clockCanvas.height = 19;
clockCanvas.width = 19;
var clockContext = clockCanvas.getContext("2d");
clockContext.textAlign = "center";
clockContext.textBaseline = "middle";
clockContext.font = "9px Arial";
clockContext.fillText(battery.level, 9, 10);
chrome.browserAction.setIcon({
imageData: clockContext.getImageData(0, 0, 19, 19)
});
}
drawIcon();
您认为问题出在哪里?您应该知道,funcRef
是一个函数,当导航器返回的电池得到解决时,将调用该函数。由于异步性,当您调用drawIcon
时,getBattery()
可能尚未解析,然后将不会执行funcRef
,这意味着battery
未定义
您应该在funcRef
中移动drawinicon
函数
var battery;
navigator.getBattery()
.then(function (b) {
battery = b;
drawIcon();
}
);
function drawIcon() {
// Your logic here
}
回调函数中b的值是多少?添加a
console.log(b)代码>那里。并读取未捕获引用错误:未定义b
。读过异步流之后,我仍然不明白为什么“getBattery()”不能像异步代码的其余部分一样执行。不,我的意思是在函数(b){…}
中。我的错。我得到了一个BatteryManager对象,这正是我应该得到的。您可以从该函数内部调用drawIcon()
,它应该可以工作。