Javascript Chrome扩展的BatteryStatus API不工作

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", "

我正在尝试为chrome浏览器创建一个扩展,它将显示系统的电池电量(并与其他东西进行耦合) 起初,我只是尝试使用简单的画布显示电池电量,但它似乎不起作用

清单:

    {
    "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()
,它应该可以工作。