Question

Je vais avoir quelques problèmes avec un script contenu injecté à la même page plusieurs fois dans mon extension Chrome.

J'injectais le script contenu de ma page "background.html", sur le changement Tab:

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

A l'intérieur du script de contenu, j'ai quelques commandes console.log

Le problème est que lorsque je charge une seule page, je vois chacun des journaux apparaissent dans la console 2-4 fois.

Il est clair pour moi assez que cela se produit à cause des iframes dans la page, je pense au moins ... Ma question est pourquoi?

J'ai vu dans la documentation « all_frames » (autorisations de script contenu tableau dans le manifeste) doit être réglé sur « false » par défaut, ce qui dans le script contenu uniquement être injecté dans le cadre en haut de la page, mais c'est tout simplement pas le cas!

Pourquoi est-il injecté plusieurs fois? Ai-je besoin de mettre physiquement « all_frames » false?

En second lieu:

Est-il possible de dire si la page que l'extension tente d'injecter le script de contenu est un iframe ou en haut à partir de la page « background.html »?

J'ai essayé

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

et a constaté que cela ne fonctionne pas à 100% du temps. Même quand j'ai que conditionnelle dans le reste de mon bloc de code (autour chrome.tabs.executeScript ()), je vois encore le script contenu injecté plusieurs fois ....

Toutes les idées ou suggestions serait grandement appréciée! :)

Était-ce utile?

La solution

onUpdated se déclenche à chaque état d'un onglet change. Cela comprend quand il est chargement et chargement done , ce qui explique les nombreuses déclarations du journal. Vous devez vérifier ce qui a changé (l'URL a changé, il charge, etc.) à chaque fois que l'événement se déclenche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top