A juste titre, de nombreux Javascripts s’enclenchent à la fin du chargement de la page via un window.onload
. Ce qui est beaucoup plus propre que d’insérer dans son code HTML : <body onload="[…]">
.
Or, si deux scripts différents désirent s’enclencher à la fin du chargement de la page via un window.onload
, seul le dernier script déclaré s’enclenchera. En effet, le window.onload
ne peut prendre qu’une seule valeur et chaque nouvelle déclaration écrase la précédente.
Exemple avec ce petit Javascript. La page n’affichera qu’une seule alerte qui aura pour texte "Fonction n°2".
// 1ère fonction
function f1() {
alert('Fonction n°1');
}
window.onload = f1;
// 2ème fonction
function f2() {
alert('Fonction n°2');
}
window.onload = f2;
Pour remédier à cela, voici une petite fonction bricolée qui va stocker toutes les fonctions s’enclenchant à la fin du chargement de la page pour finalement les executer une par une.
// Fonction de stockage des scripts à charger FuncOL = new Array();
function StkFunc(Obj) {
FuncOL[FuncOL.length] = Obj;
}
// Execution des scripts au chargement de la page window.onload =
function() {
for(i=0; i<FuncOL.length; i++)
{FuncOL[i]();}
}
Ainsi, il suffit de remplacer toutes les fonctions window.onload
par la fonction StkFunc()
et ce code se chargera d’executer les scripts l’un après l’autre.
Exemple : window.onload = MaFonction
devient StkFunc(MaFonction)
.
De ce fait, mon petit exemple de script devient fonctionnel en affichant successivement « Fonction n°1 » puis « Fonction n°2 ».
// 1ère fonction
function f1() {
alert('Fonction n°1');
}
StkFunc(f1);
// 2ème fonction
function f2() {
alert('Fonction n°2');
}
StkFunc(f2);
Il doit être possible, de gérer ce problème encore plus proprement avec la fonction native addEventListener
, mais je connais encore assez mal cette fonction. A charge de revanche !
Ce que nos lecteurs en disent :
Domi
guiguik
Julien
PodeniaK
artotal
billboc
Jcc13
Patrick
Raphaël
Julien
alex @ sarbazan
MarMotix
Druss
Raphaël
olivier
Philip
Les commentaires sont clos.