12

Sono nuovo alle estensioni di Google Chrome e ne ho creato uno per il nostro sito Web che controlla il contenuto della pagina in cui ti trovi e si basa su quello che ottiene l'ID del server (abbiamo un webfarm con 4 VM). Ora usando l'ID del server, non voglio cambiare l'icona dell'estensione per mostrare il numero lì. Ho provato con:Cambia l'icona dell'estensione di Chrome

chrome.browserAction.setIcon({ 
    path : folder + icons[2], 
    tabId: tab.id 
}); 

Ma sto ottenendo questo errore: chrome.browserAction is not available: You do not have permission to access this API. Ensure that the required permission or manifest property is included in your manifest.json.

ho provato googling l'errore e sono alla ricerca attraverso la documentazione, ma non riesco a trovare che cosa sta causando questo ...

+0

Hai definito un 'browser_action' nel tuo manifest? Manca che nel tuo manifest è l'unica cosa che posso pensare che potrebbe causare un tale errore (al di fuori di usare la versione canary/dev/beta del browser). – apsillers

+0

' "browser_action": { "default_icon": "i numeri/1green.png", "default_popup": "index.html" }' è quello che ho .. – Richard

+0

ho provato nel mio "normale" Chrome in modalità Dev e Canary – Richard

risposta

18

Gli script di contenuto non hanno accesso alla maggior parte delle API di estensione. Invece, è necessario utilizzare message passing per fare in modo che l'avviso di script del contenuto informi la pagina di sfondo di ciò che deve essere fatto.

Lo script contenuto deve inviare un messaggio utilizzando chrome.runtime.sendMessage, e lo sfondo della pagina dovrebbe ascoltare con chrome.runtime.onMessage.addListener:

contenuto dello script:

if(shouldChangeIcon) { 
    // send message to background script 
    chrome.runtime.sendMessage({ "newIconPath" : folder + icons[2] }); 
} 

pagina Background:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
     // read `newIconPath` from request and read `tab.id` from sender 
     chrome.browserAction.setIcon({ 
      path: request.newIconPath, 
      tabId: sender.tab.id 
     }); 
    }); 
+0

Ok, c'è un modo per monitorare ciò che accade in background? Avere impostato ora, ma l'icona non sta cambiando. Hanno uno background.js dichiarato in 'background e un myscript.js come' content_script'. Roba in myscript.js che spara 'console.log()' funziona, ma conserva la stessa icona .. – Richard

+1

Forse potresti usare [Dove leggere i messaggi della console da background.js in un'estensione di Chrome?] (Http: // stackoverflow.com/a/10258029/710446) – apsillers

Problemi correlati