A permissão "activeTab" concede a uma extensão acesso temporário à guia ativa no momento quando o
usuário invoca a extensão, por exemplo, clicando na ação dela. O acesso à guia
dura enquanto o usuário está na 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, em seguida,
navegar até https://example.com/foo, a extensão vai continuar tendo acesso à página. Se o
usuário navegar até https://chromium.org, o acesso será revogado.
Isso serve como uma alternativa para muitos usos de "<all_urls>", mas não exibe nenhuma mensagem de aviso
durante a instalação:
Sem "activeTab":

Com "activeTab":

O acesso não é concedido a páginas restritas, como as páginas chrome://.
Exemplo
Confira o exemplo de extensão 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
});
}
});
Motivação
Considere uma extensão de recorte da Web que tenha uma ação e um item de menu de contexto. Essa extensão só precisa acessar as guias quando a ação é clicada ou quando o item do menu de contexto é executado.
Sem "activeTab", essa extensão precisaria solicitar acesso total e persistente a todos os sites,
apenas para que pudesse fazer o trabalho se fosse chamada pelo usuário. É muito poder para uma extensão tão simples. Se a extensão for comprometida, o invasor
terá acesso a tudo o que ela tinha.
Por outro lado, uma extensão com a permissão "activeTab" só tem acesso a uma guia em resposta
a uma interação inicial explícita. Se a extensão for comprometida, o invasor precisará esperar que o
usuário invoque a extensão antes de conseguir acesso. E 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). - Receber o URL, o título e o favicon dessa guia usando uma API que retorna um objeto
tabs.Tab(basicamente,"activeTab"concede permissão de host temporariamente). - Interceptar solicitações de rede na guia para a origem do frame principal da guia usando a API webRequest. A extensão recebe temporariamente permissões de host para a origem do frame principal da guia.
Como invocar activeTab
As seguintes interações do usuário ativam a permissão "activeTab":
- Executar uma ação
- Executar um item do menu de contexto
- Executar um atalho de teclado da API commands
- Aceitar uma sugestão da API omnibox