A permissão "activeTab" dá a uma extensão acesso temporário à guia ativa no momento em que o
usuário invoca a extensão, por exemplo, clicando na ação dela. O acesso à guia dura enquanto o usuário está nessa página e é revogado quando ele sai ou fecha a guia.
Por exemplo, se o usuário invocar a extensão em https://example.com e depois
acessar https://example.com/foo, a extensão ainda terá acesso à página. Se o usuário acessar https://chromium.org, o acesso será revogado.
Isso serve como uma alternativa para muitos usos de "<all_urls>", mas não mostra uma mensagem de aviso
durante a instalação:
Sem "activeTab":

Com "activeTab":

O acesso não é concedido a páginas restritas, como páginas chrome://.
Exemplo
Confira a extensão de exemplo 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
});
}
});
Motivação
Considere uma extensão de recorte da Web que tenha uma ação e um item do menu de contexto. Essa extensão só precisa acessar as guias quando a ação dela é clicada ou quando o item do menu de contexto é executado.
Sem "activeTab", essa extensão precisaria solicitar acesso completo e persistente a todos os sites,
apenas para poder funcionar se fosse chamada pelo usuário. É muito poder para confiar a uma extensão tão simples. Se a extensão for comprometida, o invasor
terá acesso a tudo que ela tinha.
Em contraste, uma extensão com a permissão "activeTab" só obtém acesso a uma guia em resposta a um gesto explícito do usuário. Se a extensão for comprometida, o invasor precisará esperar que o
usuário a invoque para ter acesso. Esse acesso dura apenas até que a guia seja
navegada ou fechada.
O que "activeTab" permite
Enquanto a permissão "activeTab" estiver ativada para uma guia, uma extensão poderá:
- Chame
scripting.insertCSS()ouscripting.executeScript()nessa guia se a permissão"scripting"também for declarada (como no exemplo acima). - Receba o URL, o título e o favicon dessa guia usando uma API que retorna um objeto
tabs.Tab(essencialmente, o"activeTab"concede permissão de host temporariamente). - Intercepte solicitações de rede na guia para a origem do frame principal dela usando a API webRequest. A extensão recebe temporariamente permissões de host para a origem do frame principal da guia.
Como invocar activeTab
Os seguintes gestos do usuário ativam a permissão "activeTab":
- Executar uma ação
- Executar um item do menu de contexto
- Executar um atalho do teclado na API Commands
- Aceitar uma sugestão da API omnibox