Estensione Chrome: lo script del contenuto viene iniettato più volte per ogni caricamento di una singola pagina

StackOverflow https://stackoverflow.com/questions/7829895

Domanda

Riscontro alcuni problemi con uno script di contenuto iniettato più volte nella stessa pagina nella mia estensione per Chrome.

Sto inserendo lo script del contenuto dalla mia pagina "background.html", al cambio di scheda:

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ 
    chrome.tabs.getSelected(null,function(tab){
         // Do some stuff
         chrome.tabs.executeScript(null, { code: code}, function(result){

... ecc

All'interno dello script del contenuto, ho alcuni comandi console.log

Il problema è che quando carico una SINGOLA pagina, vedo che ciascuno dei log viene visualizzato nella console 2-4 volte.

È abbastanza chiaro per me che questo sta accadendo a causa degli iframe all'interno della pagina, penso almeno ... La mia domanda è PERCHÉ?

Ho visto nella documentazione che "all_frames" (array dei permessi dello script del contenuto nel manifest) dovrebbe essere impostato su "false" per impostazione predefinita, con il risultato che lo script del contenuto viene iniettato solo nel frame superiore della pagina, ma questo è semplicemente non sta accadendo!

Perché viene iniettato più volte? Devo impostare fisicamente "all_frames" su false?

In secondo luogo:

Esiste un modo per sapere se la pagina in cui l'estensione sta tentando di inserire lo script di contenuto è un iframe o una parte superiore dell'INTERNO della pagina "background.html"?

Ho provato

if(window.top === window){ console.log('whatever'); }

E ha scoperto che NON funziona il 100% delle volte. Anche quando ho quella condizione per il resto del mio blocco di codice (intorno a chrome.tabs.executeScript ()), vedo ancora lo script di contenuto iniettato più volte ...

Qualsiasi idea o suggerimento sarebbe molto apprezzato! :)

È stato utile?

Soluzione

onUpdated si attiva ogni volta che lo stato di una scheda cambia.Ciò include quando è caricamento e caricamento completato , il che spiega le molte istruzioni di registro. Devi controllare cosa è cambiato (l'URL è cambiato, è stato caricato, ecc.) Ogni volta che si verifica l'evento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top