1

제 질문은 상당히 간단하며이 작업을 수행하는 가장 쉬운 방법을 찾고 싶습니다.chrome.browserAction.onClicked에서 콘텐츠 스크립트 호출하기

내 크롬 확장의 현재 반복은 버튼을 누르면 DIV가 웹 페이지에 삽입되며 버튼을 누르면 기능이 실행됩니다.

툴바에서 브라우저 버튼을 누르면 컨텐츠 스크립트 중 하나에서 함수를 실행하여 DIV 삽입없이이 작업을 수행하려고합니다. 이것에 대해 가장 간단한 방법은 무엇입니까? 백그라운드 페이지를 사용해야한다고 생각합니다. 문서에서 볼 수있는 유일한 방법은 양쪽 끝에 청취 이벤트를 등록하는 것입니다. 이것이 유일한/단순한 방법 일 경우 어떻게해야합니까?

답변

10

예, 브라우저 또는 페이지 동작 버튼에서 콘텐츠 스크립트에 연락 이루어집니다 배경 스크립트와 콘텐츠 스크립트 (들)

첫 번째 단계 사이에 앞뒤로 전송 된 메시지 사용 : 무엇을해야 하는지를 배경 스크립트를 말해을 browserAction/pageAction 버튼을

chrome.browserAction.onClicked.addListener(function(tab) { 
    ... 
}); 

2 단계 클릭 (! 코드가 인식에 실제로) 그런 다음 콘텐츠 스크립트에 메시지를 보낼 수 browserAction.onClicked 이벤트 리스너 내부를 :

chrome.tabs.sendMessage(tab.id, {<YOURMESSAGEPAYLOAD>}); 

3 단계 : 콘텐츠 스크립트 내부에서, 당신은 수신 메시지

청취자를 추가
chrome.runtime.onMessage.addListener(function(request, sender, callback) { 
    // request contains the YOURMESSAGEPAYLOAD sent above as a Javascript object literal 
}); 

또한 둥근 다른 길을 갈 및 사용하여 배경 스크립트에 콘텐츠 스크립트하여 내부에 다음과 같은 메시지를 보낼 수 있습니다 내용 스크립트

chrome.runtime.sendMessage({<YOURMESSAGEPAYLOAD>}); 

및 다음 배경 스크립트 내에서 위에서 언급 한 바와 같이 동일한 방법을 onMessage 수신기를 사용합니다.

+0

이 문서는 말하지 않지만'onClicked '에 대한'tab' 인자는 활성 탭이라고 가정합니다. 이렇게하면'query'가 필요없이'tab.id'를 얻을 수 있습니다. – Teepeemm

+0

사실 ... 이에 따라 예제를 변경했습니다. – devnull69

+0

이 답변은 조금 늦었고 백만 달러입니다.하지만 addEventListener가 아닌 addListener입니다. –

0

devnull69가 정확하면 메시지 전달을 사용해야합니다. chromeps도 확인해보십시오. 크롬 확장을 위해 쓴 작은 pubsub 라이브러리입니다. 메시지 전달 코드를 작성할 때 많은 오버 헤드를 제거합니다.

관련 문제