A permissão "activeTab"
concede à 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á 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 navegar para https://example.com/foo, a extensão continuará tendo acesso à página. Se o usuário acessar https://chromium.org, o acesso será revogado.
Isso serve como uma alternativa para muitos usos do "<all_urls>"
, mas não mostra nenhuma mensagem de aviso
durante a instalação:
Sem "activeTab"
:
Com "activeTab"
:
Exemplo
Veja a extensão de exemplo do 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 (!tab.url.includes('chrome://')) {
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 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,
para que pudesse fazer o trabalho se fosse chamada pelo usuário. É muito difícil confiar
em uma extensão tão simples. E se a extensão for comprometida, o invasor terá acesso a tudo o que a extensão tinha.
Por outro lado, uma extensão com a permissão "activeTab"
só recebe acesso a uma guia em resposta
a um gesto explícito do usuário. Se a extensão for comprometida, o invasor vai precisar esperar o
usuário invocar a extensão antes de ter acesso. E esse acesso só dura até que a guia seja
navegada ou fechada.
O que o "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). - Consiga o URL, o título e o favicon dessa guia por uma API que retorna um objeto
tabs.Tab
(essencialmente,"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 o ActiveTab
Os seguintes gestos do usuário ativam a permissão "activeTab"
:
- Executar uma ação
- Executar um item de menu de contexto
- executar um atalho de teclado da API de comandos.
- Aceitando uma sugestão da API omnibox