Разрешение "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" :
- Выполнение действия
- Выполнение пункта контекстного меню
- Выполнение сочетания клавиш из API команд.
- Принимаем предложение от API адресной строки