서비스 워커의 이벤트

확장 프로그램 서비스 워커는 표준 서비스 워커 이벤트와 확장 프로그램 API의 여러 이벤트를 모두 지원합니다. 이 섹션에서는 사용 가능한 기능과 사용 팁을 설명합니다.

확장 프로그램 이벤트 선언

서비스 워커의 이벤트 핸들러는 전역 범위에서 선언해야 합니다. 즉, 스크립트의 최상위에 있어야 하며 함수 내에 중첩되어서는 안 됩니다. 이렇게 하면 이벤트가 초기 스크립트 실행 시 동기식으로 등록되므로 Chrome이 시작되는 즉시 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도 있습니다. 자세한 내용은 연결된 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.messagechrome.runtime.onMessage 모두)는 확장 프로그램 서비스 워커에서 지원됩니다.

서비스 워커 메시지를 사용해야 하는 특별한 이유가 없다면 확장 프로그램 메시지를 사용하는 것이 좋습니다.