Extensão do Chrome: faça com que seja executado a cada carregamento de página


91

Quero fazer uma extensão do Chrome que execute alguns scripts depois que uma página for carregada, não tenho certeza se tenho que implementar essa lógica na página de fundo ou pode ser em qualquer outro lugar, qualquer ajuda aqui será muito apreciada.


por precaução, ele deve executar o script depois que qualquer página for carregada no navegador.
albertosh

@ZloySmiertniy sim, apenas procure por scripts de conteúdo, certifique-se também de que na opção run_at você colocou document_end e também em correspondências: você precisa especificar em quais urls seus scripts serão injetados.
albertosh

Respostas:


92

A partir de um script em segundo plano, você pode ouvir o chrome.tabs.onUpdatedevento e verificar a propriedade changeInfo.statusno retorno de chamada. Ele pode estar carregando ou completo . Se estiver completo , execute a ação.

Exemplo:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete') {

    // do your things

  }
})

Como isso provavelmente será acionado a cada conclusão da guia, você também pode verificar se a guia está activeem seu atributo homônimo , como este:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

    // do your things

  }
})

8
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
Verde de

2
O que? Esta resposta é de 2 anos e meio atrás. Provavelmente tudo mudou agora.
fiatjaf de

1
Para fazer página de url específica:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ

47

Se ele precisa ser executado no onloadevento da página, o que significa que o documento e todos os seus ativos foram carregados, isso precisa estar em um script de conteúdo embutido em cada página para a qual você deseja rastrear onload.


14
Seria melhor deixar o script de conteúdo ser injetado em "document_end", ver "run_at" dentro do manifesto content_script:run_at: "document_end"
Mohamed Mansour


10

Este código deve fazer isso:

manifest.json

   {
      "name": "Alert 'hello world!' on page opening",
      "version": "1.0",
      "manifest_version": 2,
      "content_scripts": [
        {
          "matches": [
            "<all_urls>"
          ],
          "js": ["content.js"]
        }
      ]
    }

content.js

alert('Hello world!')

é possível usar regexp no campo "corresponde"?
Bootuz

Sim, vejahttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.