2016-04-11 5 views
0

Ich versuche, eine Erweiterung für Chrome-Browser zu erstellen, die den Akkustand des Systems anzeigen (und andere Dinge tun) mit der BatteryStatusAPI. Zuerst versuche ich nur Zeigen Sie den Akkustand mit einer einfachen Leinwand an, aber es scheint nicht zu funktionieren.BatteryStatus API für Chrome-Erweiterungen funktioniert nicht

manifestieren:

{ 
    "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"] 
    } 
} 

JavaScript:

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(); 

Was denken Sie, ist das Problem?

+1

Was ist der Wert von b innerhalb der Callback-Funktion? Fügen Sie dort ein 'console.log (b);' hinzu. Und lesen Sie https://stackoverflow.com/questions/23667086/why-is-my-variable-unterned-after-i-modify-it-inside-of-a-function-asynchron – rsanchez

+0

'Uncaught ReferenceError: b ist nicht definiert '. Nachdem ich über den asynchronen Fluss gelesen habe, verstehe ich immer noch nicht, warum "getBattery()" nicht wie der Rest des asynchronen Codes ausgeführt wird. – galah92

+0

Nein, ich meine in "Funktion (b) {...}". – rsanchez

Antwort

0

Sie sollten wissen für Navigator.getBattery().then(funcRef), funcRef ist eine Funktion aufgerufen werden, wenn die Batterie promise von navigator.getBattery zurückgegeben wird gelöst wird. Aufgrund von Asynchronität, wenn Sie drawIcon anrufen, getBattery() wurde möglicherweise nicht behoben, dann funcRef wird nicht ausgeführt, was bedeutet, battery ist undefined.

Sie sollten drawIcon Funktion innerhalb funcRef verschieben.

var battery; 
navigator.getBattery() 
    .then(function (b) { 
     battery = b; 
     drawIcon(); 
    } 
); 

function drawIcon() { 
    // Your logic here 
} 
Verwandte Themen