L'autorisation "activeTab" accorde à une extension un accès temporaire à l'onglet actuellement actif lorsque l'utilisateur appelle l'extension, par exemple en cliquant sur son action. L'accès à l'onglet dure tant que l'utilisateur se trouve sur cette page. Il est révoqué lorsque l'utilisateur quitte la page ou ferme l'onglet.
Par exemple, si l'utilisateur appelle l'extension sur https://example.com, puis accède à https://example.com/foo, l'extension continuera d'avoir accès à la page. Si l'utilisateur accède à https://chromium.org, l'accès est révoqué.
Cette option sert d'alternative à de nombreuses utilisations de "<all_urls>", mais n'affiche aucun message d'avertissement lors de l'installation :
Sans "activeTab" :

Avec "activeTab" :

L'accès n'est pas accordé aux pages restreintes, telles que les pages chrome://.
Exemple
Consultez l'exemple d'extension 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
});
}
});
Motivation
Prenons l'exemple d'une extension de capture Web qui comporte une action et un élément de menu contextuel. Cette extension n'a peut-être besoin d'accéder aux onglets que lorsque l'utilisateur clique sur son action ou lorsque l'élément de son menu contextuel est exécuté.
Sans "activeTab", cette extension devrait demander un accès complet et persistant à chaque site Web, simplement pour pouvoir effectuer son travail si l'utilisateur l'appelait. C'est beaucoup de pouvoir à confier à une extension aussi simple. Si l'extension est compromise, l'attaquant aura accès à tout ce que l'extension avait.
En revanche, une extension disposant de l'autorisation "activeTab" n'obtient l'accès à un onglet qu'en réponse à un geste explicite de l'utilisateur. Si l'extension est compromise, l'attaquant devra attendre que l'utilisateur l'appelle avant d'obtenir l'accès. Cet accès ne dure que jusqu'à ce que l'utilisateur quitte l'onglet ou le ferme.
Ce que "activeTab" permet de faire
Lorsque l'autorisation "activeTab" est activée pour un onglet, une extension peut :
- Appelez
scripting.insertCSS()ouscripting.executeScript()sur cet onglet si l'autorisation"scripting"est également déclarée (comme dans l'exemple ci-dessus). - Obtenez l'URL, le titre et le favicon de cet onglet via une API qui renvoie un objet
tabs.Tab(essentiellement,"activeTab"accorde temporairement l'autorisation d'hôte). - Interceptez les requêtes réseau de l'onglet vers l'origine du frame principal de l'onglet à l'aide de l'API webRequest. L'extension obtient temporairement des autorisations d'hôte pour l'origine du frame principal de l'onglet.
Appeler activeTab
Les gestes de l'utilisateur suivants activent l'autorisation "activeTab" :
- Exécuter une action
- Exécuter un élément de menu contextuel
- Exécuter un raccourci clavier à partir de l'API Commands
- Accepter une suggestion de l'API omnibox