12

Jestem nowym użytkownikiem rozszerzeń Google Chrome i utworzyłem go dla naszej witryny, który sprawdza zawartość strony, na której się znajdujesz i na której bazuje identyfikator serwera (mamy webfarm z 4 wirtualnymi maszynami). Teraz korzystając z ID serwera, nie chcę zmieniać ikony rozszerzenia, aby pokazać tam numer. Próbowałem przy użyciu:Zmień ikonę rozszerzenia Chrome

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

Ale ja dostaję ten błąd: 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.

próbowałam googlowania błąd i zostały poszukiwania poprzez dokumentację, ale nie może znaleźć to, co jest tego przyczyną ...

+0

Czy masz zdefiniowany parametr 'browser_action' w twoim manifeście? Brak tego w twoim manifeście jest jedyną rzeczą, o jakiej mogę pomyśleć, że spowodowałby taki błąd (poza używaniem wersji przeglądarki canary/dev/beta). – apsillers

+0

' "browser_action": { "Default_icon": "Numery/1green.png" "default_popup": "index.html" }' co mam .. – Richard

+0

Próbowałem w moim "normalnym" Chrome w trybie dewelopera i na kanale – Richard

Odpowiedz

18

Skrypty dotyczące treści nie mają dostępu do większości interfejsów API rozszerzeń. Zamiast tego musisz użyć message passing, aby alert skryptu treści powiadomił stronę tła o tym, co należy zrobić.

Twój skrypt treści należy wysłać wiadomość korzystając chrome.runtime.sendMessage, a strona tła powinien słuchać korzystając chrome.runtime.onMessage.addListener:

zawartość skryptu:

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

tło strony:

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

Dobra, czy istnieje sposób, w jaki mogę śledzić to, co dzieje się w tle? Ustawiłem to teraz, ale ikona się nie zmienia. Mam background.js, który jest zadeklarowany w 'background i myscript.js jako' content_script'. Stuff w myscript.js, który uruchamia 'console.log()' działa, ale wciąż jest tą samą ikoną .. – Richard

+1

Być może mógłbyś użyć [Gdzie czytać wiadomości konsoli z background.js w rozszerzeniu Chrome?] (Http: // stackoverflow.com/a/10258029/710446) – apsillers