Pregunta

Tengo algunos problemas con una secuencia de comandos de contenido que se inyecta en la misma página varias veces en mi extensión de Chrome.

Estoy inyectando la secuencia de comandos de contenido de mi página "background.html", en el cambio de pestaña:

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){

... etc

Dentro del script de contenido, tengo algunos comandos console.log

El problema es que cuando cargo una SOLA página, veo que cada uno de los registros aparece en la consola de 2 a 4 veces.

Para mí está bastante claro que esto está sucediendo debido a iframes dentro de la página, creo que al menos ... Mi pregunta es ¿POR QUÉ?

He visto en la documentación que "all_frames" (matriz de permisos del script de contenido en el manifiesto) debe establecerse en "falso" de forma predeterminada, lo que hace que el script de contenido solo se inyecte en el marco superior de la página, pero esto es simplemente no está sucediendo!

¿Por qué se inyecta varias veces? ¿Necesito establecer físicamente "all_frames" en falso?

En segundo lugar:

¿Hay alguna forma de saber si la página a la que la extensión está intentando inyectar el script de contenido es un iframe o una parte superior DENTRO de la página "background.html"?

Lo he intentado

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

Y descubrió que NO funciona el 100% del tiempo. Incluso cuando tengo ese condicional en el resto de mi bloque de código (alrededor de chrome.tabs.executeScript ()), sigo viendo el script de contenido inyectado varias veces ....

¡Cualquier idea o sugerencia será muy apreciada! :)

¿Fue útil?

Solución

onUpdated se activa cada vez que cambia el estado de una pestaña.Esto incluye cuando está cargando y cargando , lo que explica las muchas declaraciones de registro. Debe verificar qué cambió (la URL cambió, se cargó, etc.) cada vez que se activa el evento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top