백그라운드 스크립트 vs 콘텐츠 스크립트 - maeng2418/zzik-meok GitHub Wiki
백그라운드 스크립트
1. 실행 환경:
- 확장 프로그램의 전체 생명주기 동안 하나의 인스턴스로 실행됩니다.
- 사용자가 탭을 열거나 닫아도 계속 실행됩니다.
2. 권한:
- 확장 프로그램의 모든 권한에 접근할 수 있습니다.
chrome.*
API를 완전히 사용할 수 있습니다(예:chrome.tabs
,chrome.storage
,chrome.cookies
등).
3. 용도:
- 장기 실행 작업, 이벤트 리스닝, 상태 관리에 적합합니다.
- 브라우저 이벤트(탭 열기/닫기, 북마크 변경 등) 모니터링에 사용됩니다.
- 확장 프로그램의 "뇌" 역할을 합니다.
4. DOM 접근:
- 웹 페이지의 DOM에 직접 접근할 수 없습니다.
- 자체 전용 컨텍스트에서 실행됩니다.
5. manifest.json 설정:
{
"background": {
"service_worker": "background.js"
}
}
}
콘텐츠 스크립트
1. 실행 환경:
- 특정 웹 페이지 내에서 실행됩니다.
- 매칭되는 페이지가 로드될 때마다 새 인스턴스가 생성됩니다.
- 페이지마다 독립적인 인스턴스가 실행됩니다.
2. 권한:
- 제한된
chrome.*
API만 접근 가능합니다. chrome.runtime.sendMessage
를 통해 백그라운드 스크립트와 통신할 수 있습니다.
3. 용도:
- 웹 페이지와 직접 상호작용하는 작업에 적합합니다.
- DOM 조작, 이벤트 리스닝, 웹 페이지 내용 읽기/수정 등을 수행합니다.
4. DOM 접근:
- 웹 페이지의 DOM에 완전히 접근할 수 있습니다.
- 페이지 내의 JavaScript 환경과 격리되어 실행됩니다(별도의 JavaScript 컨텍스트).
5. manifest.json 설정:
{
"content_scripts": [
{
"matches": ["*://*.example.com/*"],
"js": ["content.js"]
}
]
}
통신 방법
백그라운드 스크립트와 콘텐츠 스크립트는 메시지 패싱(Message Passing)을 통해 통신합니다:
// 콘텐츠 스크립트에서 백그라운드로 메시지 전송
chrome.runtime.sendMessage({greeting: "안녕하세요!"}, function(response) {
console.log("응답 수신:", response);
});
// 백그라운드 스크립트에서 메시지 수신
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log("메시지 수신:", request);
sendResponse({farewell: "안녕히 가세요!"});
}
);
이렇게 두 스크립트는 각각 다른 환경에서 서로 다른 역할을 수행하며, 확장 프로그램의 구조를 형성합니다.