Estensione Chrome: fallo eseguire a ogni caricamento di pagina


93

Voglio creare un'estensione per Chrome che esegua alcuni script dopo che una pagina è stata caricata, non sono sicuro se devo implementare questa logica sulla pagina in background o se può essere altrove, qualsiasi aiuto qui sarà molto apprezzato.


per ogni evenienza, dovrebbe eseguire lo script dopo che qualsiasi pagina è stata caricata nel browser.
albertosh

@ZloySmiertniy sì, cerca solo gli script di contenuto, assicurati anche che nell'opzione run_at metti document_end e anche nelle corrispondenze: devi specificare in quale URL verranno iniettati i tuoi script.
albertosh

Risposte:


94

Da uno script in background è possibile ascoltare l' chrome.tabs.onUpdatedevento e controllare la proprietà changeInfo.statussulla richiamata. Può essere in caricamento o completo . Se è completo , esegui l'azione.

Esempio:

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

    // do your things

  }
})

Poiché questo probabilmente si attiverà al completamento di ogni scheda, puoi anche controllare se la scheda è activesul suo attributo omonimo , in questo modo:

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

    // do your things

  }
})

9
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
Verde

2
Che cosa? Questa risposta è di 2 anni e mezzo fa. Probabilmente adesso è cambiato tutto.
fiatjaf

1
Per fare una pagina URL specifica:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ

47

Se deve essere eseguito onloadsull'evento della pagina, il che significa che il documento e tutte le sue risorse sono state caricate, questo deve essere in uno script di contenuto incorporato in ciascuna pagina di cui si desidera tenere traccia onload.


14
Sarebbe meglio lasciare che lo script del contenuto venga inserito in "document_end" vedi "run_at" all'interno del manifest content_script:run_at: "document_end"
Mohamed Mansour


14

Questo codice dovrebbe farlo:

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

è possibile usare regexp nel campo "match"?
Bootuz

Sì, vedihttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.