12

저는 Google 크롬 확장 프로그램을 처음 사용하고 있으며 현재 사용중인 페이지의 콘텐츠를 확인하고 Google의 서버 ID를 가져 오는 Google 웹 사이트 용 플러그인을 만들었습니다. 4 VM과 함께 webfarm). 이제 서버 ID를 사용하여 확장 아이콘을 변경하여 번호를 표시하지는 않겠습니다. 나는 사용하여 시도했다 :크롬 확장 아이콘 변경

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

을하지만이 오류 받고 있어요 : 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.

내가 오류를 인터넷 검색을 시도하고 문서를 검색 한을하지만,이 원인을 찾을 수 없습니다 ...

+0

을 'browser_action'이 정의되어 있습니까? 당신 매니페스트에? 그 매니 페스트에서 누락 된 것은 내가 (브라우저의 카나리아/dev/베타 버전을 사용하는 것 이외의) 그러한 오류를 일으킬 것이라고 생각할 수있는 유일한 것입니다. – apsillers

+0

는' '브라우저 ": { "default_icon ":"번호/1green.png " "default_popup ":"index.html을 " 은}' 은 .. 내가 무엇을 내"정상 "에 시도했습니다 – Richard

+0

인가 Dev 모드의 Chrome 및 Canary – Richard

답변

18

콘텐츠 스크립트는 대부분의 확장 API에 액세스 할 수 없습니다. 대신 message passing을 사용하여 컨텐츠 스크립트 경고가 필요한 작업을 백그라운드 페이지에 알리도록해야합니다.

귀하의 콘텐츠 스크립트는 chrome.runtime.sendMessage를 사용하여 메시지를 전송해야하며, 배경 페이지 chrome.runtime.onMessage.addListener 사용하여 귀를 기울여야 :

내용 스크립트 :

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

배경 페이지 :

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

좋아요, 백그라운드에서 무슨 일이 일어나고 있는지 추적 할 수있는 방법이 있습니까? 지금 설정했지만 아이콘이 변경되지 않았습니다. background.js가'background'에 선언되어 있고 myscript.js가'content_script'로되어 있습니다. 'console.log()'를 실행하는 myscript.js의 내용은 작동하지만 여전히 같은 아이콘입니다. – Richard

+1

아마도 Chrome 확장 프로그램의 background.js에서 콘솔 메시지를 읽을 위치는 어디입니까? (http : // stackoverflow.com/a/10258029/710446) – apsillers

관련 문제