Разрешение "activeTab"
предоставляет расширению временный доступ к текущей активной вкладке, когда пользователь вызывает расширение — например, щелкнув его действие . Доступ к вкладке сохраняется, пока пользователь находится на этой странице, и аннулируется, когда пользователь уходит или закрывает вкладку. Например, если пользователь вызывает расширение на https://example.com, а затем переходит на https://example.com/foo, расширение продолжит иметь доступ к странице. Если пользователь перейдет на https://chromium.org, доступ будет отозван.
Это служит альтернативой для многих вариантов использования "<all_urls>"
, но во время установки не отображается предупреждающее сообщение :
Без "activeTab"
:
С "activeTab"
:
Пример
См. пример расширения Page Redder :
манифест.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.insertCSS()
илиscripting.executeScript()
на этой вкладке, если также объявлено разрешение"scripting"
(как в примере выше ). - Получите URL-адрес, заголовок и значок этой вкладки через API, который возвращает объект
tabs.Tab
(по сути,"activeTab"
временно предоставляет разрешение хоста ). - Перехватывайте сетевые запросы на вкладке к источнику основного кадра вкладки с помощью API webRequest . Расширение временно получает разрешения хоста для источника основного кадра вкладки.
Вызов activeTab
Следующие жесты пользователя активируют разрешение "activeTab"
:
- Выполнение действия
- Выполнение пункта контекстного меню
- Выполнение сочетания клавиш из командного API
- Принятие предложения от API омнибокса