Descrição
Use a API chrome.declarativeContent
para realizar ações dependendo do conteúdo de uma página, sem precisar de permissão para ler o conteúdo dela.
Permissões
declarativeContent
Conceitos e uso
A API de conteúdo declarativo permite ativar a ação da extensão dependendo do URL de uma página da Web ou se um seletor CSS corresponde a um elemento na página, sem precisar adicionar permissões de host ou injetar um script de conteúdo.
Use a permissão activeTab para interagir com uma página depois que o usuário clicar na ação da extensão.
Regras
As regras consistem em condições e ações. Se alguma das condições for atendida, todas as ações serão
executadas. As ações são setIcon()
e showAction()
.
O PageStateMatcher
corresponde a páginas da Web somente se todos os critérios
listados forem atendidos. Ele pode corresponder a um URL da página, um seletor composto de CSS
ou o estado de favorito de uma página. A regra a seguir ativa
a ação da extensão nas páginas do Google quando um campo de senha está presente:
let rule1 = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
css: ["input[type='password']"]
})
],
actions: [ new chrome.declarativeContent.ShowAction() ]
};
Para ativar a ação da extensão para sites do Google com um vídeo, adicione uma segunda condição, já que cada uma é suficiente para acionar todas as ações especificadas:
let rule2 = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
css: ["input[type='password']"]
}),
new chrome.declarativeContent.PageStateMatcher({
css: ["video"]
})
],
actions: [ new chrome.declarativeContent.ShowAction() ]
};
O evento onPageChanged
testa se alguma regra tem pelo menos uma condição atendida e executa as ações. As regras persistem nas sessões de navegação. Portanto, durante
a instalação da extensão, use primeiro removeRules
para limpar
as regras instaladas anteriormente e, em seguida, use addRules
para registrar novas.
chrome.runtime.onInstalled.addListener(function(details) {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([rule2]);
});
});
Com a permissão activeTab, sua extensão não vai mostrar nenhum aviso de permissão. Quando o usuário clicar na ação da extensão, ela será executada apenas em páginas relevantes.
Correspondência de URL da página
O PageStateMatcher.pageurl
corresponde quando os critérios de URL são atendidos. Os
critérios mais comuns são uma concatenação de host, caminho ou URL, seguida por "Contains", "Equals", "Prefix" ou
"Suffix". Confira alguns exemplos na tabela a seguir:
Critérios | Correspondências |
---|---|
{ hostSuffix: 'google.com' } |
Todos os URLs do Google |
{ pathPrefix: '/docs/extensions' } |
URLs dos documentos da extensão |
{ urlContains: 'developer.chrome.com' } |
Todos os URLs dos documentos para desenvolvedores do Chrome |
Todos os critérios diferenciam maiúsculas de minúsculas. Para uma lista completa de critérios, consulte UrlFilter.
Correspondência de CSS
As condições PageStateMatcher.css
precisam ser seletores compostos,
o que significa que não é possível incluir combinatores, como espaços em branco ou ">
", nos
seletores. Isso ajuda o Chrome a corresponder aos seletores com mais eficiência.
Seletores compostos (OK) | Seletores complexos (incorreto) |
---|---|
a |
div p |
iframe.special[src^='http'] |
p>span.highlight |
ns|* |
p + ol |
#abcd:checked |
p::first-line |
As condições do CSS só correspondem aos elementos exibidos: se um elemento que corresponde ao seletor for
display:none
ou um dos elementos pai for display:none
, a condição não será
correspondente. Elementos estilizados com visibility:hidden
, posicionados fora da tela ou ocultos por outros elementos
ainda podem fazer com que a condição corresponda.
Correspondência de estado com marcadores
A condição PageStateMatcher.isBookmarked
permite a correspondência do
estado de favoritos do URL atual no perfil do usuário. Para usar essa condição, a
permissão "bookmarks" precisa ser declarada no manifest da extensão.
Tipos
ImageDataType
Consulte https://developer.mozilla.org/en-US/docs/Web/API/ImageData.
Tipo
ImageData
PageStateMatcher
Corresponde ao estado de uma página da Web com base em vários critérios.
Propriedades
-
construtor
void
A função
constructor
é semelhante a esta:(arg: PageStateMatcher) => {...}
-
arg
-
retorna
-
-
css
string[] opcional
Será verdadeiro se todos os seletores de CSS na matriz corresponderem aos elementos exibidos em um frame com a mesma origem do frame principal da página. Todos os seletores nessa matriz precisam ser seletores compostos para acelerar a correspondência. Observação: listar centenas de seletores de CSS ou listar seletores de CSS que correspondem a centenas de vezes por página pode deixar os sites mais lentos.
-
isBookmarked
booleano opcional
Chrome 45 e versões mais recentesFaz correspondência se o estado de página com o marcador de página for igual ao valor especificado. Requer a permissão de favoritos.
-
pageUrl
UrlFilter opcional
Corresponde se as condições do
UrlFilter
forem atendidas para o URL de nível superior da página.
RequestContentScript
Ação de evento declarativa que injeta um script de conteúdo.
AVISO:essa ação ainda é experimental e não é compatível com builds estáveis do Chrome.
Propriedades
-
construtor
void
A função
constructor
é semelhante a esta:(arg: RequestContentScript) => {...}
-
retorna
-
-
allFrames
booleano opcional
Define se o script de conteúdo é executado em todos os frames da página correspondente ou apenas no frame superior. O padrão é
false
. -
css
string[] opcional
Nomes dos arquivos CSS que serão injetados como parte do script de conteúdo.
-
js
string[] opcional
Nomes de arquivos JavaScript a serem injetados como parte do script de conteúdo.
-
matchAboutBlank
booleano opcional
Define se o script de conteúdo será inserido em
about:blank
eabout:srcdoc
. O padrão éfalse
.
SetIcon
Ação de evento declarativa que define o ícone quadrado n-dip para a ação de página ou ação do navegador da extensão enquanto as condições correspondentes são atendidas. Essa ação pode ser usada sem permissões do host, mas a extensão precisa ter uma ação de página ou de navegador.
É preciso especificar exatamente um entre imageData
ou path
. Ambos são dicionários que mapeiam um número de pixels para uma representação de imagem. A representação da imagem em imageData
é um objeto ImageData, por exemplo, de um elemento canvas
, enquanto a representação da imagem em path
é o caminho para um arquivo de imagem relativo ao manifesto da extensão. Se os pixels da tela scale
se encaixarem em um pixel independente de dispositivo, o ícone scale * n
será usado. Se essa escala estiver ausente, outra imagem será redimensionada para o tamanho necessário.
Propriedades
-
construtor
void
A função
constructor
é semelhante a esta:(arg: SetIcon) => {...}
-
arg
-
retorna
-
-
imageData
ImageData | objeto opcional
Um objeto
ImageData
ou um dicionário {size -> ImageData} que representa um ícone a ser definido. Se o ícone for especificado como um dicionário, a imagem usada será escolhida dependendo da densidade de pixels da tela. Se o número de pixels da imagem que cabem em uma unidade de espaço da tela for igual ascale
, uma imagem com o tamanhoscale * n
será selecionada, em que n é o tamanho do ícone na IU. É necessário especificar pelo menos uma imagem.details.imageData = foo
é equivalente adetails.imageData = {'16': foo}
.
ShowAction
Uma ação de evento declarativa que define a ação da barra de ferramentas da extensão para um estado ativado enquanto as condições correspondentes são atendidas. Essa ação pode ser usada sem permissões do host. Se a extensão tiver a permissão activeTab, clicar na ação da página concede acesso à guia ativa.
Nas páginas em que as condições não forem atendidas, a ação da barra de ferramentas da extensão vai ficar em tons de cinza, e clicar nela vai abrir o menu de contexto em vez de acionar a ação.
Propriedades
-
construtor
void
A função
constructor
é semelhante a esta:(arg: ShowAction) => {...}
-
arg
-
retorna
-
ShowPageAction
Use declarativeContent.ShowAction
.
Uma ação de evento declarativa que define a ação da página da extensão para um estado ativado enquanto as condições correspondentes são atendidas. Essa ação pode ser usada sem permissões do host, mas a extensão precisa ter uma ação da página. Se a extensão tiver a permissão activeTab, clicar na ação da página vai conceder acesso à guia ativa.
Nas páginas em que as condições não são atendidas, a ação da barra de ferramentas da extensão fica em escala de cinza, e clicar nela abre o menu de contexto em vez de acionar a ação.
Propriedades
-
construtor
void
A função
constructor
é semelhante a esta:(arg: ShowPageAction) => {...}
-
arg
-
retorna
-
Eventos
onPageChanged
Fornece a API de eventos declarativos, que consiste em addRules
, removeRules
e getRules
.