De machtiging "activeTab"
geeft een extensie tijdelijke toegang tot het momenteel actieve tabblad wanneer de gebruiker de extensie aanroept , bijvoorbeeld door op de actie ervan te klikken. De toegang tot het tabblad duurt zolang de gebruiker zich op die pagina bevindt, en wordt ingetrokken wanneer de gebruiker weg navigeert of het tabblad sluit. Als de gebruiker bijvoorbeeld de extensie aanroept op https://example.com en vervolgens naar https://example.com/foo navigeert, blijft de extensie toegang hebben tot de pagina. Als de gebruiker naar https://chromium.org navigeert, wordt de toegang ingetrokken.
Dit dient als alternatief voor veel gebruik van "<all_urls>"
, maar geeft tijdens de installatie geen waarschuwingsbericht weer:
Zonder "activeTab"
:
Met "activeTab"
:
Voorbeeld
Bekijk de voorbeeldextensie 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
}
servicemedewerker:
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
});
}
});
Motivatie
Overweeg een webknipselextensie die een actie en een contextmenu-item heeft. Deze extensie heeft mogelijk pas echt toegang tot tabbladen nodig wanneer op de actie wordt geklikt of wanneer het contextmenu-item wordt uitgevoerd.
Zonder "activeTab"
zou deze extensie volledige, permanente toegang tot elke website moeten aanvragen, zodat deze zijn werk zou kunnen doen als de gebruiker er toevallig een beroep op zou doen. Dit is veel kracht om aan zo'n eenvoudige uitbreiding toe te vertrouwen. En als de extensie ooit wordt gecompromitteerd, krijgt de aanvaller toegang tot alles wat de extensie bezat.
Een extensie met de machtiging "activeTab"
krijgt daarentegen alleen toegang tot een tabblad als reactie op een expliciet gebruikersgebaar. Als de extensie gecompromitteerd is, moet de aanvaller wachten tot de gebruiker de extensie aanroept voordat hij toegang krijgt. En die toegang duurt slechts totdat er door het tabblad wordt genavigeerd of wordt gesloten.
Wat "activeTab" toestaat
Terwijl de machtiging "activeTab"
is ingeschakeld voor een tabblad, kan een extensie:
- Roep
scripting.insertCSS()
ofscripting.executeScript()
op dat tabblad aan als de machtiging"scripting"
ook is gedeclareerd (zoals in het bovenstaande voorbeeld ). - Haal de URL, titel en favicon voor dat tabblad op via een API die een
tabs.Tab
object retourneert (in wezen verleent"activeTab"
tijdelijk hosttoestemming ). - Onderschep netwerkverzoeken op het tabblad naar de hoofdframeoorsprong van het tabblad met behulp van de webRequest API. De extensie krijgt tijdelijk hostrechten voor de oorsprong van het hoofdframe van het tabblad.
ActiveTab aanroepen
De volgende gebruikersgebaren schakelen de machtiging "activeTab"
in:
- Een actie uitvoeren
- Een contextmenu-item uitvoeren
- Een sneltoets uitvoeren vanuit de opdrachten-API
- Een suggestie van de omnibox API accepteren