Extensión de Chrome: haz que se ejecute en cada carga de página

91

Quiero hacer una extensión de Chrome que ejecute algunos scripts después de que se cargue una página, no estoy seguro de si tengo que implementar esta lógica en la página de fondo o puede estar en cualquier otro lugar, cualquier ayuda aquí será muy apreciada.

albertosh
fuente
por si acaso, debería ejecutar el script después de que se cargue cualquier página en el navegador.
albertosh
@ZloySmiertniy sí, solo busque scripts de contenido, también asegúrese de que en la opción run_at ponga document_end y también en coincidencias: debe especificar en qué URL se inyectarán sus scripts.
albertosh

Respuestas:

92

Desde un script en segundo plano puede escuchar el chrome.tabs.onUpdatedevento y verificar la propiedad changeInfo.statusen la devolución de llamada. Puede estar cargando o completo . Si está completo , realice la acción.

Ejemplo:

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

    // do your things

  }
})

Debido a que esto probablemente se activará al completar cada pestaña, también puede verificar si la pestaña está activeen su atributo homónimo , así:

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

    // do your things

  }
})
fiatjaf
fuente
8
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
Verde
2
¿Qué? Esta respuesta es de hace 2 años y medio. Probablemente todo haya cambiado ahora.
Fiatjaf
1
Para hacer una página URL específica:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ
47

Si necesita ejecutarse en el onloadevento de la página, lo que significa que el documento y todos sus activos se han cargado, esto debe estar en un script de contenido incrustado en cada página para la que desea realizar un seguimiento onload.

Matchu
fuente
14
Sería mejor dejar que la secuencia de comandos de contenido se inyecte en "document_end", consulte "run_at" dentro del manifiesto de content_script:run_at: "document_end"
Mohamed Mansour
38

Puede poner su secuencia de comandos en una secuencia de comandos de contenido, consulte

Bohdan
fuente
10

Este código debería hacerlo:

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
fuente
¿Es posible utilizar expresiones regulares en el campo "coincidencias"?
Bootuz
Sí, mirahttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan