Comment charger un script de contenu après L'exécution du Javascript d'une page?
Mon extension est censée charger un script de contenu, searchTopic.js, seulement après que la page dans laquelle il est injecté soit déjà complètement chargée (Oui, j'ai mis " run_at "à" document_end " dans le manifeste d'extension), mais en fait il se charge avant que tous les objets DOM aient été créés (les objets cruciaux sont créés via Javascript dans la page). Donc, la question Est, Comment puis-je attendre que le Javascript de la page soit exécuté? Voici mon manifeste:
"content_scripts": [
{
"run_at": "document_end",
"matches": ["https://groups.google.com/forum/*"],
"js": ["searchTopic.js"]
}
],
3 réponses
Vous ne pouvez donc pas définir un script de contenu à déclencher après le JS de la page, simplement en définissant le manifeste seul. Vous devez coder pour cela dans le script de contenu lui-même.
Pour les scripts de contenu, {[2] } se déclenche avant l'événement onload
(contrairement à la valeur par défaut document_idle
- qui peut se déclencher à des moments imprévisibles).
Donc, la première étape consiste à attendre l'événement load
avec du code comme celui-ci dans votre script de contenu(searchTopic.js
):
window.addEventListener ("load", myMain, false);
function myMain (evt) {
// DO YOUR STUFF HERE.
}
Dans le cas où le script que vous aimez prend un certain temps à terminer, vous devrez interroger certaines conditions au cas par cas. Par exemple:
window.addEventListener ("load", myMain, false);
function myMain (evt) {
var jsInitChecktimer = setInterval (checkForJS_Finish, 111);
function checkForJS_Finish () {
if ( typeof SOME_GLOBAL_VAR != "undefined"
|| document.querySelector ("SOME_INDICATOR_NODE_css_SELECTOR")
) {
clearInterval (jsInitChecktimer);
// DO YOUR STUFF HERE.
}
}
}
script
les éléments sont exécutés dans l'ordre. Le navigateur arrête même de charger le contenu DOM s'il y a des nœuds script
dans le body
. Ceci est garanti pour fonctionner, sinon document.write()
cesserait de fonctionner.
Vous avez donc deux solutions:
- utilisez l'événement
onload
pour charger votre code. - ajoute une balise de script comme dernier élément de la page (dernière chose dans l'élément
body
). Ce script sera exécuté après que tous les autres scripts ont terminé et après que le corps a été converti en arbre DOM.
Vous utilisez la fenêtre.la méthode de chargement.
function addLoadEvent(a) {
var b = window.onload;
"function" != typeof window.onload ? window.onload = a : window.onload = function () {
b && b(),
a()
}
}
function init() {
alert('init');
}
addLoadEvent(init);