'activeTab' 권한

"activeTab" 권한은 사용자가 확장 프로그램을 호출할 때(예: 작업을 클릭) 확장 프로그램에 현재 활성 탭에 대한 임시 액세스 권한을 부여합니다. 탭에 대한 액세스는 사용자가 해당 페이지에 있는 동안 지속되며 사용자가 다른 곳으로 이동하거나 탭을 닫으면 취소됩니다. 예를 들어 사용자가 https://example.com에서 확장 프로그램을 호출한 다음 https://example.com/foo로 이동하면 확장 프로그램이 페이지에 계속 액세스할 수 있습니다. 사용자가 https://chromium.org로 이동하면 액세스 권한이 취소됩니다.

이는 "<all_urls>"의 여러 용도를 대체하지만 설치 중에 경고 메시지를 표시하지 않습니다.

"activeTab"가 없는 경우:

activeTab이 없는 경우

"activeTab"를 사용합니다.

activeTab 사용

chrome:// 페이지와 같은 제한된 페이지에 대한 액세스 권한은 부여되지 않습니다.

Page Redder 샘플 확장 프로그램을 참고하세요.

manifest.json:

{
  "name": "Page Redder",
  "version": "2.0",
  "permissions": [
    "activeTab",
    "scripting"
  ],
  "background": {
    "service_worker": "service-worker.js"
  },
  "action": {
    "default_title": "Make this page red"
  },
  "manifest_version": 3
}

service-worker:

function reddenPage() {
  document.body.style.backgroundColor = 'red';
}

chrome.action.onClicked.addListener((tab) => {
  // If the tab URL is not set, it is a restricted page.
  if (tab.url) {
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

동기

작업컨텍스트 메뉴 항목이 있는 웹 클리핑 확장 프로그램을 생각해 보세요. 이 확장 프로그램은 작업이 클릭되거나 컨텍스트 메뉴 항목이 실행될 때만 탭에 액세스하면 됩니다.

"activeTab"가 없으면 이 확장 프로그램은 사용자가 호출할 경우 작업을 수행할 수 있도록 모든 웹사이트에 대한 완전한 영구 액세스 권한을 요청해야 합니다. 이처럼 간단한 확장 프로그램에 이 정도의 권한을 부여하는 것은 과도합니다. 확장 프로그램이 보안 침해되면 공격자는 확장 프로그램이 보유한 모든 항목에 액세스할 수 있습니다.

반면 "activeTab" 권한이 있는 확장 프로그램은 명시적인 사용자 동작에 대한 응답으로만 탭에 대한 액세스 권한을 획득합니다. 확장 프로그램이 보안 침해된 경우 공격자는 액세스 권한을 얻기 전에 사용자가 확장 프로그램을 호출할 때까지 기다려야 합니다. 이 액세스 권한은 탭이 탐색되거나 닫힐 때까지만 지속됩니다.

'activeTab'이 허용하는 작업

탭에 "activeTab" 권한이 사용 설정되어 있는 동안 확장 프로그램은 다음 작업을 할 수 있습니다.

  • "scripting" 권한도 선언된 경우 (위의 예 참고) 해당 탭에서 scripting.insertCSS() 또는 scripting.executeScript()를 호출합니다.
  • tabs.Tab 객체를 반환하는 API를 통해 탭의 URL, 제목, 파비콘을 가져옵니다(기본적으로 "activeTab"는 일시적으로 호스트 권한을 부여함).
  • webRequest API를 사용하여 탭의 네트워크 요청을 탭의 기본 프레임 출처로 가로챕니다. 확장 프로그램은 탭의 기본 프레임 출처에 대한 호스트 권한을 일시적으로 획득합니다.

activeTab 호출

다음 사용자 동작을 통해 "activeTab" 권한을 사용할 수 있습니다.