Uprawnienie "activeTab"
daje rozszerzeniu tymczasowy dostęp do obecnie aktywnej karty, gdy
użytkownik wywołuje rozszerzenie, np. klikając jego działanie. Dostęp do karty
trwa, dopóki użytkownik przegląda tę stronę, i jest unieważniane, 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
jeśli przejdziesz na stronę https://example.com/foo, rozszerzenie zachowa dostęp do tej strony. Jeśli
użytkownik otworzy stronę https://chromium.org, dostęp zostanie unieważniony.
Jest to metoda alternatywna wobec wielu zastosowań "<all_urls>"
, ale nie wyświetla komunikatu ostrzegawczego
podczas instalacji:
Bez "activeTab"
:
"activeTab"
:
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
}
Skrypt service worker:
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
});
}
});
Motywacja
Załóżmy, że masz rozszerzenie internetowe z akcją i pozycją menu kontekstowego. Ten może potrzebować dostępu do kart tylko po kliknięciu danego rozszerzenia lub element menu kontekstowego.
Bez "activeTab"
to rozszerzenie wymagałoby pełnego, trwałego dostępu do każdej strony.
tylko po to, aby działał, jeśli użytkownik go wywoła. To dużo
które można powierzyć tak prostemu rozszerzeniu. Jeśli haker zostanie przejęty,
uzyska dostęp do wszystkich elementów tego rozszerzenia.
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ć na
w celu wywołania rozszerzenia przed uzyskaniem dostępu. Dostęp ten jest możliwy tylko do momentu,
użytkownik lub produkt jest zamknięty.
Co „activeTab” zezwala
Gdy uprawnienie "activeTab"
jest włączone dla danej karty, rozszerzenie może:
- Wywołaj na tej karcie funkcję
scripting.insertCSS()
lubscripting.executeScript()
, jeśli zadeklarowano też uprawnienie"scripting"
(jak w przykładzie powyżej). - Pobierz URL, tytuł i favikonę tej karty za pomocą interfejsu API, który zwraca obiekt
tabs.Tab
Zasadniczo"activeTab"
przyznaje tymczasowe uprawnienia hosta. - Przechwytywać żądania sieciowe na karcie do źródła głównej ramki karty za pomocą żądania webRequest API. Rozszerzenie tymczasowo otrzymuje uprawnienia hosta dotyczące źródła głównej ramki karty.
Wywołuję ActiveTab
Te gesty użytkownika włączają uprawnienie "activeTab"
:
- wykonanie działania,
- Wykonywanie pozycji menu kontekstowego
- Wykonywanie skrótu klawiszowego za pomocą interfejsu API poleceń
- Zaakceptowanie sugestii z interfejsu API omniboksu