Comment obtenir un contenu de script pour charger APRÈS une page Javascript est exécuté?
Mon extension est censé charger un contenu de script, searchTopic.js seulement après la page il est injecté en a déjà entièrement chargé (oui, j'ai mis "run_at" à "document_end dans le prolongement du manifeste), mais en fait c'est le chargement avant de tous les objets DOM ont été créés (les crucial sont créés via du Javascript dans la page). Donc la question est, comment puis-je attendre jusqu'à ce que la page du Javascript est exécuté? Voici mon manifeste:
"content_scripts": [
{
"run_at": "document_end",
"matches": ["https://groups.google.com/forum/*"],
"js": ["searchTopic.js"]
}
],
- Vous ne pouvez pas prédire l'avenir. Toute solution que vous trouvez est spécifique à la situation pour laquelle vous avez écrit le script. Essayez de jouer avec le
window.onload
événement, ou autrement par un type d'interrogation à l'aide de chronomètres pour détecter le moment où la page est dans l'état souhaité. - Vous ne pouvez pas savoir quand tous les javascript, ont été exécutées. Il est exécuté une seule fois lorsque l'analysé, mais ses actions (manipulation du DOM, en outre script de chargement) qui pourrait se passer ensuite, déclenché par un événement et j'ai peur de ceux qui sont intéressants pour vous.
Vous devez vous connecter pour publier un commentaire.
"run_at": "document_end"
est équivalent àDOMContentLoaded
. Qui est, il se déclenche après la statique HTML est chargé, mais avant de ralentir les images et les lentes de finition javascript.De sorte que vous ne pouvez pas définir un contenu de script à feu après la page JS, juste en mettant le manifeste seul. Vous devez code dans le contenu du script lui-même.
Pour les scripts de contenu,
"run_at": "document_end"
le feu avant leonload
événement (à la différence de la valeur par défautdocument_idle
-- qui peut mettre le feu à des moments imprévisibles).Ainsi, la première étape consiste à attendre que la
load
cas avec ce type de code dans votre contenu de script (searchTopic.js
):Dans le cas où le script que vous vous souciez d'prend un certain temps à la fin, vous aurez pour vérifier une condition au cas par cas. Par exemple:
searchTopic.js
avait chargé trop tôt. Ce qui, exactement êtes-vous en train de faire, et ce que les messages d'erreur vous obtenez sur la console, le cas échéant. ... Que voulez-vous dire "réponses n ° 1 et 2"? L'une des réponses à cette question a été supprimé par son affiche. Il n'a pas de résoudre votre problème.var keyNode = document.querySelector ("div[role='list'] div.gwt-Label"); if (keyNode && /No results found/i.test (keyNode.textContent) ) {...
. qui ne fait que passer sur les recherches sans résultats. Ou tout simplement continuellement attendre les résultats de recherche et d'agir sur eux, car ils apparaissent. Comme avec cet utilitaire.test()
fonction, avec la casse du pavillon.script
éléments sont exécutés dans l'ordre. Le navigateur s'arrête même de chargement DOM contenu si il y ascript
nœuds dans lebody
. Ceci est garanti pour fonctionner, sinondocument.write()
allais arrêter de travailler.Donc, vous avez deux solutions:
onload
événement pour charger votre code.body
élément). Ce script sera exécuté après que tous les autres scripts ont fini et après que le corps a été converti en une arborescence DOM.window.onload
attendasync
/defer
scripts de charger et d'exécuter, de sorte que fonctionne mieux que l'ajout d'un script en bas de la page. (Voir "The download of an external script must delay the load event.
" sur le HTML du W3C API.) Le problème général de l'attente pour asynchrones script comportements (Ajax,setTimeout
, événements) demeure, mais ce n'est pas résoluble en général.Vous utilisez la fenêtre.la méthode de chargement.