Uprawnienie "activeTab" zapewnia rozszerzeniu tymczasowy dostęp do aktualnie aktywnej karty, gdy użytkownik wywoła rozszerzenie, np. klikając jego działanie. Dostęp do karty trwa, dopóki użytkownik jest na tej stronie, i jest odbierany, gdy użytkownik przejdzie na inną 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ę żadna wiadomość ostrzegawcza:
Bez "activeTab":

Z "activeTab":

Dostęp do stron o ograniczonym dostępie, np. stron chrome://, nie jest przyznawany.
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';
}
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
});
}
});
Motywacja
Rozważ użycie rozszerzenia do wycinania fragmentów 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 wykonasz 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ć, gdy użytkownik go potrzebuje. To duża moc, którą powierzasz tak prostemu rozszerzeniu. Jeśli rozszerzenie zostanie przejęte, atakujący uzyska dostęp do wszystkiego, do czego miało ono dostęp.
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, atakujący będzie musiał poczekać, aż użytkownik je uruchomi, aby uzyskać dostęp. Dostęp ten trwa tylko do momentu, gdy karta zostanie zamknięta lub nastąpi na niej nawigacja.
Co umożliwia „activeTab”
Gdy uprawnienie "activeTab" jest włączone na karcie, rozszerzenie może:
- Zadzwoń pod numer
scripting.insertCSS()lubscripting.executeScript()na tej karcie, jeśli zadeklarowano też"scripting"uprawnienie (jak w przykładzie powyżej). - Pobierz adres URL, tytuł i ikonę tej karty za pomocą interfejsu API, który zwraca obiekt
tabs.Tab(w zasadzie"activeTab"tymczasowo przyznaje uprawnienia hosta). - Przechwytywanie żądań sieciowych na karcie do głównego źródła ramki karty za pomocą interfejsu webRequest. Rozszerzenie tymczasowo uzyskuje uprawnienia hosta dla źródła głównej ramki karty.
Wywoływanie activeTab
Te gesty użytkownika umożliwiają przyznanie uprawnienia "activeTab":
- Wykonanie działania
- Wybieranie pozycji menu kontekstowego
- Wykonywanie skrótu klawiszowego za pomocą interfejsu Commands API
- Akceptowanie sugestii z interfejsu API omniboksu