Разрешение "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
}
service-worker:
function reddenPage() {
document.body.style.backgroundColor = 'red';
}
browser.action.onClicked.addListener((tab) => {
// If the tab URL is not set, it is a restricted page.
if (tab.url) {
browser.scripting.executeScript({
target: { tabId: tab.id },
func: reddenPage
});
}
});
Мотивация
Рассмотрим расширение для веб-клиппинга, у которого есть действие и пункт контекстного меню. Этому расширению может потребоваться доступ к вкладкам только при нажатии на его действие или при выполнении пункта контекстного меню.
Без "activeTab" расширению пришлось бы запрашивать полный постоянный доступ ко всем сайтам, чтобы выполнять свои функции, когда пользователь его вызывает. Это слишком много полномочий
для такого простого расширения. И если расширение когда-либо будет взломано, злоумышленник
получит доступ ко всему, что было у расширения.
Расширение с разрешением "activeTab" получает доступ к вкладке только в ответ на явный жест пользователя. Если расширение будет взломано, злоумышленнику придется ждать, пока пользователь запустит его, чтобы получить доступ. И этот доступ длится только до тех пор, пока вкладка не будет
перемещена или закрыта.
Что позволяет разрешение activeTab
Если для вкладки включено разрешение "activeTab", расширение может:
- Вызовите
scripting.insertCSS()илиscripting.executeScript()на этой вкладке, если также объявлено разрешение"scripting"(как в примере выше). - Получать URL, заголовок и значок сайта для этой вкладки через API, который возвращает объект
tabs.Tab. По сути,"activeTab"временно предоставляет разрешение на доступ к хосту. - Перехватывать сетевые запросы на вкладке к источнику основного фрейма вкладки с помощью webRequest API. Расширение временно получает разрешения на доступ к хосту для источника основного фрейма вкладки.
Вызов activeTab
Разрешение "activeTab" можно предоставить с помощью следующих жестов пользователя:
- выполнение действия;
- Выполнение пункта контекстного меню.
- выполнение сочетания клавиш из commands API;
- Принятие подсказки из omnibox API.