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

Разрешение "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" :