2011-12-21 3 views
2

Quand je suis en cours d'exécution du navigateur Chrome en utilisant:Les scripts de contenu d'extension Chrome ne sont pas injectés en premier lieu, comment déboguer?

chromium-browser --load-extension =/chemin/vers/ma/l'extension --user-data-dir =/path/to/chrome/profile --app = http: // localhost/somepage

certains scripts de contenu ne sont pas injectés dans la page. Ces scripts sont définis comme suit dans le fichier manifeste:

"content_scripts" : [{ 
       "matches" : [ "http://*/*", "https://*/*" ], 
       "js" : [ "content/s1.js", "content/s2.js", "content/s3.js", "content/s4.js" ], 
       "run_at" : "document_end" 
}] 

Lors de l'inspection de la page, je vois que seulement s1.js et s4.js ont reçu une injection avec succès. Après avoir rechargé la page, tous les scripts sont injectés correctement et mon extension fonctionne comme prévu.

Quelle peut être la raison de cela, et comment déboguer cela?

Edit:

Ces scripts de contenu (qui ne parviennent pas à injecter parfois) référence 'document' au début. Il semble que si je les envelopper dans quelque chose comme:

setTimeout(function() { document. ... }, 5000); 

Ils sont toujours injectés comme prévu. Est-il possible que le document ne soit pas disponible, même si "run_at": "document_end" a été spécifié dans le manifeste?

Merci!

+0

J'ai remarqué cela aussi. Je crois que c'est la raison pour laquelle je n'ai pas pu utiliser la fonction document.ready de JQuery. – Soviut

Répondre

1

Vous pouvez mieux faire:

Créer 1 script content.js:

/* inject script */ 
try { 
var script1 = document.createElement("script");script1.type = "text/javascript";script1.src = chrome.extension.getURL("/js/injected1.js");document.getElementsByTagName("head")[0].appendChild(script1); 
var script2 = document.createElement("script");script2.type = "text/javascript";script2.src = chrome.extension.getURL("/js/injected2.js");document.getElementsByTagName("head")[0].appendChild(script2); 
var script3 = document.createElement("script");script3.type = "text/javascript";script3.src = chrome.extension.getURL("/js/injected3.js");document.getElementsByTagName("head")[0].appendChild(script3); 
var script4 = document.createElement("script");script4.type = "text/javascript";script4.src = chrome.extension.getURL("/js/injected4.js");document.getElementsByTagName("head")[0].appendChild(script4); 
} catch(e) {} 

dans le manifest.json:

"content_scripts" : [{ 
      "matches" : [ "http://*/*", "https://*/*" ], 
      "js" : [ "content.js" ], 
      "run_at" : "document_end" 

}]

Questions connexes