[DOM] chargement de script sequentiel
bonjour,
j'ai deux fonctions (a() et b()) chacune définie dans son
propre script (a.js et b.js).
b() fait confiance à une variable globale positionnée par
a() .... mais bien sûr a() n'a pas fini son travail quand
b() se lance ...
sans doute parce que a.js et b.js sont chargés en parallèle.
d'où ma question: comment forcer un chargement séquentiel,
ou mieux demander à b() d'attendre un signal émis par a() ?
(positionner un drapeau dans a() et un while ( ! drapeau)
dans b() ne me ravi pas ...)
merci pour vos solutions :-)
Frames, variables globales, et Code JS transversal
Citation:
Envoyé par
denisC
Lier b() au windows.onload. Tu seras sur que le traitement
fait par a() est terminé.
Mon pb est que a.js est que l'appli (pas taper) est dans 3
frames .... on travaille sur de l'existant avec un historique
un peu lourd ...
et la difficulté est que b() se lance sous une frame mais
utilise une variable globale définie au niveau de la page
contenant les frames (main.html) ....
c'est pour cela que j'imaginais une solution à base de
drapeau, ou de signal attendu par b() mais envoyé par a().
Citation:
Mieux encore, lier les deux au windows.onload :
Code:
1 2
|
window.attachEvent('onload',function(){a();b();}); |
(attention syntaxe IE / FFx différente).
oui, moi c'est addEventHandler() et je ferais mieux d'utiliser
Prototype.js ... quand j'aurai réglé mon pb de Frames .. car
évidemment je ne peux pas imaginer de charger la lib 3 fois
dans 3 frames différentes /o\
Citation:
De façon générale, je ne fais jamais confiance au chargement
des fichiers pour executer des méthodes, autres que lier des
fonctions aux évenements.
oui, c'est essentiellement ce que j'utilise pour lancer mes
traitement: une function initPage() que je lie a l'evenement
load.
mais là ... je ne peux pas lancer b() au chargement de
main.html, b() est définie et lancée dans frameB.js inclus
par frameB.html mais utilise a() définie dans main.html ...
Je sais que c'est un pb de design mais je cherche une
solution temporaire avant le grand refactoring ;-)
peut-on declarer ses propres evenements ?
je reviens sur la question d'échange de signal
la question est:
"comment conditionner le chargement d'un script à la fin du
chargement d'une page ?"
mais la réponse ressemble à ce que j'utilise pour chacune
de mes pages, à peine modifié:
aujourd'hui j'ai
framePage.html:
Code:
1 2
|
<script type="text/javascript" src="js/loadFramePage.js"></script> |
et loadFramePage.js:
Code:
1 2 3 4 5 6 7
|
function initPage() {
patati patata;
......;
}
window.addEventListener("load", initPage, false); |
ce qui ne lance le code qu'à la fin du chargement de l'Html.
à la place, si je veux ne lancer ce code qu'à la fin du
chargement de mon main.html je peux plutôt mettre:
Code:
1 2
|
parent.window.addEventListener("load", initPage, false); |
Mais cela ne fonctionnera pas, car cet évènement load
concerne l'html, pas le javascript ...
d'où:
peut-on déclarer des évènements ?
dans loadMain.js j'aurai
Code:
1 2
|
raise( Event(mySignal) ); |
et dans loadFramePage.js:
Code:
1 2 3 4 5
|
function initPage() {
...;
}
parent.window.addEventListener("mySignal", initPage, false); |
non ?
Désolé pour la verbosité (et la confusion), et merci de votre patience ;-)
Declencher des evenements personnalises
Bon, je pense avoir trouvé un début de solution, exactement
ce à quoi je pensais au début: déclencher un signal, en fait
un 'event'.
en résumé:
une page Main.html qui contient des frames dont FramePage.html
(attention, marche dans firefox/mozilla, DOM niveau 3)
dans le loadMain.js (lié au load de Main.html ):
Code:
1 2 3 4 5 6 7
|
// déclarer l'évènement
var monEvent = document.createEvent("Events");
monEvent.initEvent("MainOk", true, true);
// le passer à la frame concernée
document.FramePage.dispatchEvent(monEvent); |
dans le loadFramePage.js
Code:
1 2 3 4 5 6 7 8
|
function initFramePage(){
patati ptata;
.
.
.
}
window.addEvenListener("MainOk", initFramePage, false); |
c'est en test, et tout n'est pas nickel mais c'est un début.
(notamment que se passera-t-il si je reload juste la frame mais pas le Main.html ? je sais pas ...)
je reste a l'ecoute de vos remarques.
@+
PS: la webographie
http://javascript.developpez.com/faq...ment#fireEvent
http://www.howtocreate.co.uk/tutoria...ript/domevents
http://www.truerwords.net/articles/w...om_events.html
http://www.w3.org/TR/2003/NOTE-DOM-L...07/events.html