2011-06-10 20 views
7

Uso de scripts de contenido de Chrome Quiero eliminar varios iframes en una página web antes de cargar su contenido.¿Cómo puedo modificar una página web usando el script de contenido de google chrome antes de procesar el DOM?

Encontré, que usando la propiedad run_at: document_start en el manifiesto de extensiones mi javascript se ejecuta justo después de la solicitud de la página principal y antes de que se procese el DOM y se carguen imágenes, iframes, etc. Logicaly en este punto la estructura DOM no es availabel y no puede modificar la página utilizando comandos como:

myelement=document.getElementById('iframeX'); 

myelement.parentNode.removeChild(myelement); 

¿Cómo puedo acceder y modificar los datos de la página reqeusted entonces?

Respuesta

7

Es necesario para activar la secuencia de comandos contenidos en document_start y añadir un oyente beforeload - se puede utilizar event.preventDefault para bloquear selectivamente el contenido de la carga y retire el marco que ha intentado cargar el contenido:

document.addEventListener('beforeload', function(event) { 
     if (event.url.match('facebook')) { 
      event.preventDefault(); 
      $(event.target).remove(); 
     } 
    }, false); 

Tengo blogged about an equivalent approach to using the beforeload event for Firefox también.

+0

Gracias por la respuesta! Tuve que modificar el código un poco para que funcione (podría ser específico de Chrome): 'document.addEventListener ('beforeload', function (event) { if (event.url.match (/facebook.com/)) { event.preventDefault(); $ (event.target) .Remove();} \t \t }, true); ' Por cierto: ¿Dónde sabías que quería decir Facebook :) – Cornelius

+1

¡Ha, ciega suerte! Supongo que Facebook está en la categoría de aplicaciones ajaxy que mucha gente quiere modificar :-) –

+0

Tenga en cuenta que 'event.preventDefault()' no impide que Chrome recupere el contenido (no creo que haya ninguna forma de hacer eso por el momento). Todavía se descarga, simplemente no se ejecuta (si es un script). – Dan

2

El manifest.json para este debe contener content_scripts como:

"content_scripts": [ 
    { 
     "matches": ["*://*/*"], 
     "js": [ "scan.js" ], 
     "run_at": "document_start", 
     "all_frames" : true 
    } 
] 
+1

https://developer.chrome.com/extensions/content_scripts.html – HaveAGuess

Cuestiones relacionadas