확장 프로그램 서비스 워커는 표준 서비스 워커 이벤트와 확장 프로그램 API의 여러 이벤트를 모두 지원합니다. 이 섹션에서는 사용 가능한 항목을 설명하고 사용에 관한 팁을 제공합니다.
확장 프로그램 이벤트 선언
서비스 워커의 이벤트 핸들러는 전역 범위에서 선언해야 합니다. 즉, 스크립트의 최상위 수준에 있어야 하며 함수 내에 중첩되어서는 안 됩니다. 이렇게 하면 초기 스크립트 실행 시 동기식으로 등록되므로 Chrome이 서비스 워커가 시작되는 즉시 이벤트를 전달할 수 있습니다. 예를 들면 다음과 같습니다.
chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); chrome.action.onClicked.addListener(handleActionClick); });
chrome.action.onClicked.addListener(handleActionClick); chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); });
일반 이벤트
확장 프로그램 서비스 워커는 특정 API의 이벤트를 지원합니다. 몇 가지 일반적인 사항이 아래에 설명되어 있습니다. 이러한 API 중 일부는 사용 권한이 필요하며 일부 API에는 일부 Chrome 버전에서 사용할 수 없는 이벤트, 메서드 또는 속성이 있을 수 있습니다. 자세한 내용은 링크된 API 문서, 특히 사용하려는 이벤트, 메서드 또는 속성을 참고하세요.
chrome.action
- 확장 프로그램의 툴바 아이콘과 사용자 상호작용(특정 페이지(탭) 또는 전체 확장 프로그램에 대한 작업)에 대한 응답으로 실행됩니다.
chrome.management
- 확장 프로그램 설치, 제거, 사용 설정, 사용 중지와 관련된 이벤트를 제공합니다.
chrome.notifications
- 확장 프로그램에서 생성된 시스템 알림과 사용자의 상호작용과 관련된 이벤트를 제공합니다.
chrome.permissions
- 사용자가 확장 프로그램 권한을 부여하거나 취소한 시점을 나타냅니다.
chrome.runtime
- 확장 프로그램 수명 주기와 관련된 이벤트, 확장 프로그램의 다른 부분에서 전송된 메시지, 사용 가능한 확장 프로그램 또는 Chrome 업데이트 알림을 제공합니다.
chrome.storage.onChanged
StorageArea
객체가 삭제되거나 키의 값이 변경 또는 설정될 때마다 실행됩니다. 각StorageArea
인스턴스에는 자체onChanged
이벤트가 있습니다.chrome.webNavigation
- 기내 내비게이션 요청의 상태에 대한 정보를 제공합니다.
필터
이벤트를 특정 사용 사례로 제한하거나 불필요한 이벤트 호출을 제거하려면 이벤트 필터를 지원하는 API를 사용하세요. 예를 들어 tabs.onUpdated
이벤트를 수신 대기하는 확장 프로그램이 사용자가 특정 웹사이트로 이동할 때 이를 감지한다고 가정해 보겠습니다. 이 이벤트는 모든 탭의 모든 탐색에서 호출됩니다. 대신 필터와 함께 webNavigation.onCompleted
를 사용하세요. 예를 들면 다음과 같습니다.
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
chrome.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
웹 서비스 작업자 이벤트
확장 프로그램 서비스 작업자는 다른 곳에서 설명된 수명 주기 이벤트 외에도 더 많은 것을 지원합니다.
ServiceWorkerGlobal.fetch
확장 프로그램 패키지에서 항목이 검색되거나 확장 프로그램 또는 팝업 스크립트에서 fetch()
및 XMLHttpRequest()
가 호출될 때 실행됩니다. 콘텐츠 스크립트의 호출은 서비스 워커 fetch
핸들러가 가로채지 않습니다. 후자의 경우 가져올 페이지의 URL을 manifest.json
의 "host_permissions"
키에 추가해야 합니다.
ServiceWorkerGlobal.message
서비스 워커 메시지 전달은 확장 프로그램 메시지 전달 외에도 사용할 수 있지만 두 시스템은 상호 운용되지 않습니다. 즉, sendMessage()
(여러 확장 프로그램 API에서 사용 가능)를 사용하여 전송된 메시지를 서비스 워커 메시지 핸들러가 가로채지 않습니다. 마찬가지로 postMessage()
를 사용하여 전송된 메시지는 확장 프로그램 메시지 핸들러에 의해 가로채지 않습니다. 두 유형의 메시지 핸들러(ServiceWorkerGlobal.message
및 chrome.runtime.onMessage
) 모두 확장 프로그램 서비스 워커에서 지원됩니다.
서비스 워커 메시지를 사용할 만한 구체적인 이유가 없는 한 확장 프로그램 메시지를 사용하는 것이 좋습니다.