12

Ich bin neu bei Google Chrome Erweiterungen und ich habe eine für unsere Website erstellt, die den Inhalt der Seite prüft, auf der Sie sich befinden und auf der die ID des Servers basiert (wir haben eine Webfarm mit 4 VMs). Jetzt benutze ich die Server-ID und möchte das Erweiterungssymbol ändern, um die Nummer dort anzuzeigen. Ich habe versucht mit:Ändern Sie das Chrome-Erweiterungssymbol

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

Aber ich bin immer diese Fehlermeldung: 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.

Ich habe versucht, den Fehler googeln und haben durch die Dokumentation gesucht, aber nicht finden können, was dies verursacht ...

+0

Haben Sie eine 'browser_action' definiert? in deinem Manifest? Ich vermisse, dass in Ihrem Manifest das Einzige ist, was ich mir vorstellen kann, das einen solchen Fehler verursachen würde (abgesehen davon, dass ich die canary/dev/beta-Version des Browsers verwende). – apsillers

+0

' "browser_action": { "Default_icon": "Zahlen/1green.png", "default_popup": "index.html" }' Ist das, was ich habe .. – Richard

+0

ich in meinem "normalen" versucht haben, Chrome im Dev-Modus und auf Canary – Richard

Antwort

18

Inhaltsskripts haben keinen Zugriff auf die meisten Erweiterungs-APIs. Stattdessen müssen Sie message passing verwenden, damit die Inhaltsskriptwarnung die Hintergrundseite darüber informiert, welche Aufgaben ausgeführt werden müssen.

Ihr Inhalt Skript sollte eine Nachricht chrome.runtime.sendMessage mit senden, und die Hintergrundseite sollte mit chrome.runtime.onMessage.addListener hören:

Inhalt Skript:

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

Hintergrund Seite:

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

Okay, kann ich irgendwie verfolgen, was im Hintergrund passiert? Habe es jetzt eingerichtet, aber das Icon ändert sich nicht. Habe eine background.js, die in 'background deklariert ist und eine myscript.js als' content_script'. Stuff in myscript.js, die 'console.log()' auslöst, funktioniert, aber immer noch das gleiche Symbol .. – Richard

+1

Vielleicht könnten Sie [Wo kann ich Konsolenmeldungen von background.js in einer Chrome-Erweiterung lesen?] (Http: // stackoverflow.com/a/10258029/710446) – apsillers