«Активная вкладка»; разрешение

Разрешение "activeTab" предоставляет расширению временный доступ к текущей активной вкладке, когда пользователь запускает расширение — например, щелкнув по его действию . Доступ к вкладке сохраняется, пока пользователь находится на этой странице, и отзывается, когда пользователь переходит на другую страницу или закрывает вкладку. Например, если пользователь запускает расширение на https://example.com, а затем переходит на https://example.com/foo, расширение продолжит иметь доступ к этой странице. Если пользователь переходит на https://chromium.org, доступ отзывается.

Это служит альтернативой для многих случаев использования "<all_urls>" , но при установке не отображает никаких предупреждающих сообщений :

Без "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
}

работник сферы услуг:

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.insertCSS() или scripting.executeScript() на этой вкладке, если также объявлено разрешение "scripting" (как в приведенном выше примере ).
  • Получите URL, заголовок и значок сайта для этой вкладки с помощью API, который возвращает объект tabs.Tab (по сути, "activeTab" временно предоставляет хосту разрешение ).
  • Перехват сетевых запросов во вкладке к основному фрейму вкладки с помощью API webRequest . Расширение временно получает права доступа хоста к основному фрейму вкладки.

Вызов activeTab

Следующие действия пользователя активируют разрешение "activeTab" :