Manifesto - Recursos acessíveis na Web

Recursos acessíveis na Web são arquivos dentro de uma extensão que podem ser acessados por páginas da Web ou outras extensões. As extensões geralmente usam esse recurso para expor imagens ou outros recursos que precisam ser carregados em páginas da Web, mas qualquer recurso incluído no pacote de uma extensão pode ficar acessível na Web.

Por padrão, nenhum recurso é acessível na Web, porque isso permite que um site malicioso imprima extensões instaladas pelo usuário ou explore vulnerabilidades (por exemplo, bugs XSS) nas extensões instaladas. Apenas páginas ou scripts carregados da origem de uma extensão podem acessar os recursos dela.

Declaração do manifesto

Use a propriedade de manifesto web_accessible_resources para declarar quais recursos são expostos e a quais origens. Essa propriedade é uma matriz de objetos que declara as regras de acesso a recursos. Cada objeto lista vários recursos de extensão e precisa fornecer um valor para pelo menos uma das chaves matches ou extension_ids para indicar as origens que podem acessar esses recursos.

{
  ...
  "web_accessible_resources": [
    {
      "resources": [ "test1.png", "test2.png" ],
      "matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
    }, {
      "resources": [ "test3.png", "test4.png" ],
      "matches": [ "https://web-accessible-resources-2.glitch.me/*" ]
    }
  ],
  ...
}

Cada objeto da matriz contém os seguintes elementos:

"resources"
Uma matriz de strings, cada uma contendo um caminho relativo para um determinado recurso do diretório raiz da extensão. Os recursos podem conter asteriscos (*) para correspondências de caracteres curinga. Por exemplo, "/images/*" expõe tudo que está no diretório images/ da extensão de forma recursiva, enquanto "*.png" expõe todos os arquivos PNG.
"matches"
Uma matriz de strings, cada uma contendo um padrão de correspondência que especifica quais sites podem acessar esse conjunto de recursos. Somente a origem é usada para corresponder aos URLs. As origens incluem a correspondência de subdomínio. O Google Chrome emite o erro "Padrão de correspondência inválido" se o padrão tiver um caminho diferente de "/*".
"extension_ids"
Uma matriz de strings, cada uma contendo o ID de uma extensão que pode acessar os recursos.

Cada elemento precisa incluir um "resources" e um "matches" ou "extension_ids". Isso estabelece um mapeamento que expõe os recursos especificados para páginas da Web que correspondem ao padrão ou para extensões com IDs correspondentes.

Os recursos estão disponíveis em uma página da Web que usa o URL chrome-extension://[PACKAGE ID]/[PATH], que pode ser gerado com o método runtime.getURL(). Os recursos são disponibilizados com cabeçalhos CORS apropriados. Portanto, estão disponíveis usando fetch().

A navegação de uma origem da Web para um recurso de extensão é bloqueada, a menos que o recurso esteja listado como acessível pela Web. Observe estes casos específicos:

  • Quando uma extensão usa a API webRequest para redirecionar uma solicitação de recurso público para um recurso inacessível na Web, essa solicitação também é bloqueada.
  • Os redirecionamentos de recursos públicos são bloqueados mesmo que o recurso não acessível na Web pertença à extensão de redirecionamento.
  • A navegação é bloqueada no modo de navegação anônima, a menos que o valor do campo "incognito" esteja definido como "split".

Os scripts de conteúdo não precisam ser permitidos.

Exemplo

O exemplo de recursos acessíveis na Web demonstra o uso desse elemento em uma extensão funcional.