Ações de extensão no Manifesto V3

Simeon Vincent
Simeon Vincent

Desde o lançamento das extensões do Chrome, a plataforma permite que os desenvolvedores exponham a funcionalidade diretamente na IU de nível superior do Chrome usando ações. Uma ação é um botão de ícone que pode abrir um pop-up ou acionar alguma funcionalidade na extensão. Antes, o Chrome oferecia suporte a duas tipos de ações, ações do navegador e ações da página; O Manifest V3 mudou isso consolidando funcionalidade em uma nova API chrome.action.

Um breve histórico de ações de extensão

Embora o chrome.action seja novo no Manifesto V3, a funcionalidade básica que ele fornece remonta quando as extensões ficaram estáveis pela primeira vez em janeiro de 2010. O primeiro Stable lançamento da plataforma de extensões do Chrome suportava dois tipos diferentes de ações: o navegador ações e ações na página.

As ações do navegador permitiram que os desenvolvedores de extensões exibissem um ícone "na barra de ferramentas principal do Google Chrome, à direita da barra de endereço". (fonte) e ofereceu aos usuários uma maneira fácil para acionar a funcionalidade da extensão em qualquer página. As ações de página, por outro lado, tinham como objetivo "representam ações que podem ser realizadas na página atual, mas que não se aplicam a todas as páginas" (fonte).

Uma ação de página (à esquerda) aparece na omnibox, indicando que a extensão pode fazer algo nessa página. Uma ação do navegador (à direita) está sempre visível.

Em outras palavras, as ações do navegador deram aos desenvolvedores de extensões uma superfície de interface persistente no navegador enquanto as ações da página apareciam somente quando a extensão podia fazer algo útil na página atual.

Ambos os tipos de ações eram opcionais, então um desenvolvedor de extensões poderia optar por não fornecer ações, uma ação da página ou do navegador (não é permitido especificar várias ações).

Cerca de seis anos depois, o Chrome 49 introduziu um novo paradigma de interface do usuário para extensões. Para ajudar para que os usuários entendam quais extensões eles tinham, o Chrome começou a exibir todas as extensões ativas na direito da omnibox. Os usuários podem "transbordar" extensões de aplicativo no menu do Google Chrome, se quiserem.

Ícones de extensões ocultas apareceriam no menu do Google Chrome.

Para exibir um ícone para cada extensão, essa atualização também deu início a duas mudanças importantes no o comportamento das extensões na interface do Chrome. Primeiro, todas as extensões começaram a exibir ícones na barra de ferramentas. Se a extensão não tivesse um ícone, o Chrome gerava um automaticamente para ela. Segundo, as ações da página movidos para a barra de ferramentas junto com ações do navegador e receberam uma affordance para se diferenciar entre o "programa" e "ocultar" estados.

Uma ação de página desativada (à esquerda) é renderizada como uma imagem em escala de cinza na barra de ferramentas enquanto uma ação ativada (à direita) aparece em cores.

Essa mudança permitiu que as extensões de ação na página continuassem funcionando conforme esperado, mas também diminuiu o papel das ações da página ao longo do tempo. Um dos efeitos da reformulação da interface do usuário foi que as ações da página efetivamente pelas ações do navegador. Como todas as extensões apareceram na barra de ferramentas, os usuários espera que clicar no ícone da barra de ferramentas de uma extensão invoque a extensão, e as ações do navegador se tornou uma interação cada vez mais importante para as extensões do Chrome.

Mudanças no Manifest V3

A interface e as extensões do Chrome continuaram evoluindo ao longo dos anos após a interface das extensões de 2016. reprojetado, mas as ações do navegador e da página permaneceram praticamente inalteradas. Ou seja, pelo menos até começamos a planejar como modernizar a plataforma de extensões com o Manifest V3.

Ficou claro para a equipe de extensões que as ações do navegador e das páginas eram cada vez mais distinção sem significado. E, pior ainda, as diferenças sutis de comportamento dificultavam o trabalho dos desenvolvedores. determinar qual deles usar. Percebemos que poderíamos resolver esses problemas combinando e a ação de página em uma única "ação".

Insira a API da ação chrome.action é análogo mais diretamente a chrome.browserAction, mas tem algumas diferenças notáveis.

Primeiro, chrome.action introduz um novo método chamado getUserSettings(). Esse método oferece aos desenvolvedores de extensões uma maneira de verificar se o usuário fixou a ação da extensão no barra de ferramentas.

let userSettings = await chrome.action.getUserSettings();
console.log(`Is the action pinned? ${userSettings.isOnToolbar ? 'Yes' : 'No'}.`);

"getUserSettings" pode parecer um nome um pouco incomum para essa funcionalidade em comparação "isPinned", mas o histórico de ações no Chrome mostra que a interface do navegador muda mais rápido que fazem. Assim, nossa meta com essa API é expor as preferências do usuário relacionadas a ações interfaces genéricas para minimizar a rotatividade futura de APIs. Ele também permite que outros fornecedores de navegador exponham conceitos de interface específicos do navegador no objeto UserSettings retornado por este .

Segundo, o ícone e o estado ativado/desativado da ação de uma extensão podem ser controlados API Declarative Content. Isso é importante porque permite que as extensões reajam à navegação do usuário comportamento deles sem acessar o conteúdo ou mesmo os URLs das páginas visitadas. Por exemplo, vamos Ver como uma extensão pode ativar sua ação quando o usuário visitar páginas em example.com.

// Manifest V3
chrome.runtime.onInstalled.addListener(() => {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
    chrome.declarativeContent.onPageChanged.addRules([
      {
        conditions: [
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: {hostSuffix: '.example.com'},
          })
        ],
        actions: [new chrome.declarativeContent.ShowAction()]
      }
    ]);
  });
});

O código acima é quase idêntico ao que uma extensão faria com uma ação de página. O único a diferença é que, no Manifesto V3, usamos declarativeContent.ShowAction em vez de declarativeContent.ShowPageAction no Manifesto V2.

Por fim, os bloqueadores de conteúdo podem usar os atributos da API declarativeNetRequest, setExtensionActionOptions) para mostrar o número de solicitações bloqueadas pela extensão para uma determinada guia. Essa capacidade é importante porque permite bloqueadores de conteúdo para manter os usuários finais informados sem expor metadados de navegação potencialmente confidenciais. à extensão.

Resumo

Modernizar a plataforma de extensões do Chrome foi uma das nossas principais motivações para lançar o Manifesto V3. Em muitos casos que significaram mudar para novas tecnologias, mas também simplificar nossa superfície de API; esse era nosso objetivo aqui.

Espero que essa postagem tenha ajudado a esclarecer esse ponto específico da plataforma Manifest V3. Para para saber mais sobre como a equipe do Chrome está abordando o futuro das extensões de navegador, confira a Páginas Visão da plataforma e Visão geral do Manifesto V3 na nossa na documentação do desenvolvedor. Você também pode conversar sobre extensões do Chrome com outros desenvolvedores no Grupo do Google chromium-extensions.