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.


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

  }
})

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.


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


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!')

¿Es posible utilizar expresiones regulares en el campo "coincidencias"?
Bootuz

Sí, mirahttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.