'activeTab' 권한

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

이는 "<all_urls>"를 많이 사용하는 대신 사용할 수 있지만 설치 중에 경고 메시지 없음을 표시합니다.

"activeTab"가 없는 경우:

활성 탭 사용 안함

"activeTab"를 사용합니다.

활성 탭 사용

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
}

서비스 워커:

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

chrome.action.onClicked.addListener((tab) => {
  if (!tab.url.includes('chrome://')) {
    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" 권한을 사용 설정하는 사용자 동작은 다음과 같습니다.