1

콘텐츠 스크립트를 실행하여 어딘가에 링크 된 첫 번째 이미지를 식별하고 백그라운드 스크립트에 대한 링크를 반환하고 싶습니다. 그러나 나는 그들 사이에 어떤 메시지도 전달할 수 없으며, 나는 이유를 모른다. 대부분의 코드는 주석입니다. 컨텐츠 스크립트가 첫 번째 헤더를 "테스트"로 변경하여 테스트를 수행하는지 테스트하려고합니다. (메시지없이 수행 할 수있는 유일한 작업은 페이지의 HTML 및 CSS 변경이므로) . 코드는 다음과 같습니다 편집 : 전체 업데이트 된 코드Chrome 확장 프로그램의 콘텐츠 스크립트에서 메시지 전달하기

배경 스크립트 :

chrome.browserAction.onClicked.addListener(function() { 
chrome.tabs.query({active:true, currentWindow:true}, function(tabs) 
{ 
    chrome.tabs.executeScript(tabs[0].id, {file:"content.js"}, function() 
    { 
     console.log("sending first time"); 
     console.log(tabs[0].id); 
     chrome.tabs.sendMessage(tabs[0].id,{test: "test"}, function (response) 
     { 
      if (undefined == response) 
      { 
       console.log ("first one didn't work"); 
       chrome.tabs.sendMessage(tabs[0].id, {test: "test"}, function (response) 
       { 
        console.log(response.test); 
       }); 
      } 
     }); 
    }); 
}); 
}); 

내용 스크립트 :

chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) 
{ 
/*var test1 = document.getElementsByTagName("h1")[0]; 
test1.innerHTML="test";*/ 
sendReponse({test: "123"}); 
/*var parentList =document.getElementsByTagName("a"); 
var link = ""; 
var child; 
for (var i=2; i<parentList.length;i++) 
{ 
    child=parentList[i].firstChild; 
    if ("IMG"==child.nodeName) 
    { 
     link=parentList[i].href; 
     break; 
    } 
} 
teste1.innerHTML=link; 
var answer = new Object(); 
Answer.link = link; 
teste1.innerHTML=answer.link; 
sendResponse({messager:answer});*/ 
}); 
+0

문제는 DOM 조작과 관련이 있으며 메시지가 아닙니다. contentscript에서 sendResponse 콜백을 실행하고 백그라운드 스크립트 인 console.log에서 응답을 시도해보십시오. – levi

+0

또한 탭 오류 콘솔을 확인 했습니까? 나는 contentscript에서 error 또는 console.logs가 나타날 것이라고 믿습니다. – levi

+0

levi : 경고문처럼 간단한 문장을 넣더라도 chrome.tabs.querry 안에 있으면 실행되지 않습니다. 또한 콘솔에 쓸 수 없습니다. 다른 질문을 한 또 다른 문제입니다. –

답변

0

내가 확장 페이지 자체의 확장을 테스트했습니다. 하지만 그것은 자바 스크립트를 삽입 할 수없는 것 같습니다 (아마 브라우저의 설정 페이지이기 때문일 것입니다). 다른 페이지에서도 잘 작동했습니다.