Comment puis-je modifier une page Web à l'aide du script de contenu google chrome avant que le DOM ne soit traité?

En utilisant des scripts de contenu chrome, je souhaite supprimer plusieurs iframes dans une page Web avant que leur contenu ne soit chargé.

J'ai trouvé que, en utilisant la propriété run_at: document_start dans les extensions manifeste, mon javascript est exécuté juste après la demande de la page principale et avant que le DOM ne soit traité et que les images, les iframes etc. soient chargés. Logicaly à ce stade, la structure DOM n'est pas disponible et je ne peux pas modifier la page en utilisant des commandes comme:

myelement=document.getElementById('iframeX'); myelement.parentNode.removeChild(myelement); 

Comment puis-je accéder et modifier les données de la page requises alors?

Vous devez déclencher votre script de contenu sur document_start et ajouter un auditeur de vérification avant – vous pouvez utiliser event.preventDefault pour bloquer sélectivement le contenu du chargement, puis supprimer le cadre qui a essayé de charger le contenu:

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

J'ai bloggé une approche équivalente pour utiliser l'événement beforeload pour Firefox également.

Le manifest.json pour cela devrait contenir des content_scripts contenu comme:

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