2016-04-11 16 views
0

Sistemin pil düzeyini görüntüleyecek krom tarayıcısı için bir uzantı oluşturmaya çalışıyorum (ve başka şeyleri ikiye katlayın) BatteryStatusAPI. Sadece deniyorum Basit tuval kullanarak pil seviyesini gösterir, ancak işe yaramaz.Chrome eklentileri için BatteryStatus API çalışmıyor

tezahür:

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

Sorunun ne düşünüyorsunuz?

+1

Geri arama işlevinin içindeki b değeri nedir? 'Console.log (b);' orada ekleyin. Ve oku https://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron – rsanchez

+0

'Dikkat Çekilmemiş ReferenceError: b tanımlı değil '. Eşzamansız akış hakkında okuduktan sonra, hala "getBattery()" in neden asenkron kodun geri kalanı gibi çalıştırılmadığını anlamıyorum. – galah92

+0

Hayır, '' işlevi (b) {...} 'içinde demek istiyorum. – rsanchez

cevap

0

Sen Navigator.getBattery().then(funcRef) için, funcRef pil promise çözüme kavuşturulacağını navigator.getBattery tarafından döndüğünde çağrılacak bir işlevdir bilmeli. Eşzamanlılık nedeniyle, drawIcon, getBattery() arandığınızda, funcRef çözülemeyebilir, battery undefined anlamına gelir.

funcRef içinde drawIcon işlevini taşımanız gerekir.

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

function drawIcon() { 
    // Your logic here 
}