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.

albertosh
fonte
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

  }
})
fiatjaf
fonte
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.

Matchu
fonte
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!')
Evan Ross
fonte
é possível usar regexp no campo "corresponde"?
Bootuz
Sim, vejahttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan