Uprawnienie "activeTab" daje rozszerzeniu tymczasowy dostęp do aktywnej karty, gdy użytkownik wywoła rozszerzenie, na przykład klikając jego działanie. Dostęp do karty trwa, gdy użytkownik jest na tej stronie, i jest odbierany, gdy użytkownik opuści stronę lub zamknie kartę.
Jeśli na przykład użytkownik wywoła rozszerzenie na stronie https://example.com, a następnie przejdzie na stronę https://example.com/foo, rozszerzenie nadal będzie miało dostęp do strony. Jeśli użytkownik przejdzie na stronę https://chromium.org, dostęp zostanie cofnięty.
Jest to alternatywa dla wielu zastosowań "<all_urls>", ale podczas instalacji nie wyświetla się komunikat ostrzegawczy:
Bez: "activeTab"

Z "activeTab":

Dostęp nie jest przyznawany do stron z ograniczonym dostępem, takich jak strony chrome://.
Przykład
Zobacz przykładowe rozszerzenie 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
});
}
});
Motywacja
Weźmy pod uwagę rozszerzenie do wycinania stron internetowych, które ma działanie i element menu kontekstowego. To rozszerzenie może potrzebować dostępu do kart tylko wtedy, gdy klikniesz jego działanie lub gdy zostanie wykonany element menu kontekstowego.
Bez "activeTab" to rozszerzenie musiałoby prosić o pełny, stały dostęp do każdej witryny, aby móc działać, gdyby użytkownik je wywołał. To bardzo dużo możliwości jak na tak proste rozszerzenie. Jeśli rozszerzenie zostanie przejęte, haker uzyska dostęp do wszystkiego, co było dostępne dla rozszerzenia.
Z kolei rozszerzenie z uprawnieniem "activeTab" uzyskuje dostęp do karty tylko w odpowiedzi na wyraźny gest użytkownika. Jeśli rozszerzenie zostanie przejęte, osoba atakująca będzie musiała poczekać, aż użytkownik je wywoła, zanim uzyska dostęp. Dostęp jest możliwy tylko do momentu zamknięcia karty lub przejścia na inną stronę.
Na co pozwala uprawnienie „activeTab”
Gdy uprawnienie "activeTab" jest włączone na karcie, rozszerzenie może:
- Wywołaj
scripting.insertCSS()lubscripting.executeScript()na tej karcie, jeśli zadeklarowano też uprawnienie"scripting"(jak w przykładzie powyżej). - pobrać adres URL, tytuł i favikonę tej karty za pomocą interfejsu API, który zwraca obiekt
tabs.Tab(zasadniczo"activeTab"tymczasowo przyznaje uprawnienia hosta). - Przechwytywanie żądań sieciowych na karcie do źródła ramki głównej karty za pomocą interfejsu API webRequest. Rozszerzenie tymczasowo uzyskuje uprawnienia hosta do źródła ramki głównej karty.
Wywoływanie activeTab
Uprawnienie "activeTab" jest włączane przez te gesty użytkownika:
- wykonywanie działania,
- wykonanie elementu menu kontekstowego,
- wykonanie skrótu klawiszowego z interfejsu API poleceń,
- zaakceptowanie sugestii z interfejsu API omniboksu,