2011-01-20 5 views
4

Google 크롬 확장, 배경과 통신 설명뿐만 아니라 샘플을 실행하십시오 :내가 읽은하고이 페이지를 다시 읽어

http://code.google.com/chrome/extensions/background_pages.html

을하지만 배경을 수행하는 방법을 이해하지 못하는 것 같습니다 background.html, popup.html 및 content.js 간의 통신 함수를 트리거하고 응답을 받고 그 응답을 처리하는 메시지를 보내려고합니다. 지도 샘플은 나를 돕기에 가깝지만 단순한 슈퍼 맵핑이 필요하고 모든 맵 작업이 필요하지 않습니다. (참고로 jQuery와 Javascript를 알고 있으므로 원하는 경우 jQuery로 자유롭게 혼합 해보십시오.)

+0

관련 내용 : [브라우저 동작, 배경 스크립트 및 크롬 확장의 콘텐츠 스크립트 간의 통신을위한 컨텍스트 및 방법?] (http://stackoverflow.com/questions/17246133/contexts-and-methods-for-communication- 브라우저 간 액션 - 배경 -sc) –

답변

17

모든 확장 페이지 (배경 페이지, 팝업, 정보 표시 줄, 페이지 작업은 모두 같은 확장자 내에서 실행됩니다. 하나의 도메인을 가진 웹 페이지라고 생각하면 그 도메인은 확장 ID입니다. 각 확장 페이지는 일반 페이지와 비슷합니다 (웹 사이트를 개발할 때와 비슷합니다.)

모든 확장 페이지 쉽게 서로 통신하는 여러 가지 방법이 이렇게 있습니다

  1. chrome.extension.getBackgroundPage()

    직접 해보세요! 내가 할 수있을 때마다 나는이 방법을 사용한다. 내 의견으로는 그것의 청소부.

    var bkg = chrome.extension.getBackgroundPage();` 
    bkg.ping();` 
    
  2. chrome.extension.onRequest.addListenerchrome.extension.sendRequest 아래와 같이

    , 당신은뿐만 아니라 정보를 전달하는 extension messaging를 사용할 수 있습니다. 이벤트 지향적 이길 원할 때이 방법을 사용합니다. 나는 이것을 확장 페이지에서 거의 사용하지 않는다.

    popup.html

    chrome.extension.sendRequest({method: 'ping'}, function(response) { 
        // response.result 
    }); 
    

    background_page.html

    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
        if (request.method == 'ping') { 
         sendResponse({result: 'pong'}); 
        } 
    }); 
    

이제 "확장자 페이지"및 "Content Scripts"사이의 차이가있다. 그것을 이해하기 위해이 문서를주의 깊게 읽으십시오. 콘텐츠 스크립트는 확장 페이지가 아니며 확장 프로그램 페이지에서 수행 할 수 없습니다. 위에서 언급 한 페이지 중 어느 페이지와도 직접 통신 할 수 없습니다. 콘텐츠 스크립트는 확장 페이지가 아닌 웹 페이지의 컨텍스트에서 실행되는 JavaScript 파일입니다. 인식해야 할 중요한 차이점이 있습니다.

따라서 확장 페이지와 콘텐츠 스크립트간에 통신하려면 Messaging을 사용해야합니다. 그 페이지는 많은 정보를 가지고 있습니다. 이는 메시징을 사용한 방법 (위의 2 단계)과 매우 유사하지만 요청을 보내는 방법 만 다릅니다. 확장 페이지 (배경, 팝업, 페이지 등)에서 콘텐츠 스크립트로 단일 요청을 보내야하므로 chrome.tabs.sendRequest을 사용해야합니다. 그렇게하려면 탭의 ID를 알아야합니다. 자세한 내용은 Tab API을 참조하십시오.

내선이 콘텐츠 스크립트와 매우 자주 통신하는 경우 긴 수명 연결을 사용할 수 있습니다. 위의 메시징 섹션에서 잘 설명되어 있습니다.

비슷한 질문에 대해 많은 질문과 다른 사람들에게 답변 해 왔습니다. 자바 스크립트 경험이 있으신 분들께서는 문서를 읽으시기를 권장합니다. 필요한 모든 것을 갖추고 있습니다. API를 읽으면 이제 Content Script와 Extension Pages의 차이점을 이해하고 그 사이의 통신은 Extension Messaging을 통해 이루어 졌으면합니다.

+0

고마워요! 선명도! :) – Volomike

+0

jQuery를 사용하는 경우에도주의해야 할 점이 있습니다. background.html에 jQuery를로드해야한다. 그렇지 않으면 아무 것도 얻을 수 없다. 또한 background.html의 콘텐츠 스크립트 요청에서 chrome.tabs.sendRequest를 수행 할 필요가 없다는 것을 알았습니다. 위의 # 2를 사용 했으므로 작동했습니다. – Volomike

+0

눈에 띄는 부분도 있습니다. Chrome이 백그라운드에서 업데이트되었거나 새로운 버전으로 업데이트되었을 수도 있습니다. 어제 모두 content.js를 통해 오류없이 내 localhost에 AJAX 호출을 할 수있었습니다. 오늘 - 이제 교차 도메인 오류가 발생하여 백그라운드 방법을 사용하도록했습니다. 정말 유용한 코드는 다음과 같습니다. http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/howto/contentscript_xhr/ – Volomike

관련 문제