Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1493 connectés 

  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  Comportement d'événement Javascript bizarre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comportement d'événement Javascript bizarre

n°2454780
rufo
Pas me confondre avec Lycos!
Posté le 25-09-2023 à 17:39:21  profilanswer
 

Bonjour,
Dans Mediawiki, on peut ajouter dans l'espace de nom "Mediawiki:" des Javascript (ex : "Mediawiki:MonScript.js" ). Ils sont exécutés lors du chargement de la page.
 
Pour synchroniser 2 scripts, je passe par un événement perso. Dans mon script Toto.js, j'ai mis :

Code :
  1. let MonEvent = new Event("MonScriptReady" );
  2. let bResult = document.dispatchEvent(MonEvent);


 
Dans mon 2ème script Titi.js, je veux démarrer son exécution quand Toto.js a terminé. J'ai donc mis :

Code :
  1. document.addEventListener("MonScriptReady", function(event) {
  2.  console.log("C'est bon, je peux démarrer..." );
  3. });


 
Ca marche de temps en temps mais pas systématiquement. :( Je ne comprends pas pourquoi. Est-ce que c'est mon code JS qui pose souci ?
 
Merci par avance pour votre aide :jap:


Message édité par rufo le 25-09-2023 à 17:39:56

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 25-09-2023 à 17:39:21  profilanswer
 

n°2454790
mechkurt
Posté le 25-09-2023 à 20:05:45  profilanswer
 

Aucune erreur dans la console ?
Je pensais (bêtement ^^) que ptet titi.js était parfois appelé avant toto.js...
Dans le doute tu devrais peut être tout mettre "encapsulé" dans des onload pour être sur que tout est là.
Après ça reste du bricolage, je suis sur que y'a une meilleur façon de faire. [:nedurb]


---------------
D3
n°2454792
rufo
Pas me confondre avec Lycos!
Posté le 25-09-2023 à 21:03:20  profilanswer
 

Non, pas de msg d'erreur dans la console. Ce qui est étonnant, c'est que lorsque ça fonctionne bien, le console.log() que j'ai mis après l'instruction document.dispatchEvent(MonEvent); dans Toto.js s'affiche APRES le console.log() qui est dans document.addEventListener("MonScriptReady", function(event) {...});
 
Pourtant, je trouvais que c'était une bonne idée d'utiliser un Event pour synchroniser mes 2 scripts. Y'a un truc que j'ai pas dû bien comprendre... :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2454905
TotalRecal​l
Posté le 28-09-2023 à 06:00:16  profilanswer
 

Vu que tu dis que c'est au chargement, y a effectivement de bonnes chances pour que le dispatch soit fait avant que le listener ne s'y soit abonné.
 
Tu contrôles comment le démarrage de l'exécution, tu as une sorte de readyState / load / DOMContentLoaded ou machin du même genre ?
 
Tu n'as qu'un émetteur et un gestionnaire, pas d'abonnement multiple avec des cancel ?


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2454906
flo850
moi je
Posté le 28-09-2023 à 08:35:55  profilanswer
 

est ce qu'i lest possible que l'event listener soit exécuté après que l'event ait été dispatched ?

 

en général, je fais un un event dispatcher + une variable globale pour faire ça


Message édité par flo850 le 28-09-2023 à 08:36:06

---------------

n°2454907
rufo
Pas me confondre avec Lycos!
Posté le 28-09-2023 à 09:33:05  profilanswer
 

Effectivement, ça pourrait être une piste le fait que le dispatch soit exécuté avant que le event listener soit mis en place. Je vais tester.
 
Là, j'ai trouvé une façon de faire qui marche pas mal : je fais un "include" du fichier qui contient la fonction que j'appelais sur le listener et dans le JS qui faisait le dispatch, je check si la fonction existe (donc que le include a bien été fait). Si oui, je l'exécute.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2454926
rufo
Pas me confondre avec Lycos!
Posté le 28-09-2023 à 18:04:10  profilanswer
 

Bon, je viens de tester avec une structure du genre :

Code :
  1. var PageLoaded = false;
  2.  
  3. if (document.readyState === "loading" ) {
  4.    document.addEventListener("DOMContentLoaded", (event) => {
  5.        if (!PageLoaded )
  6.        {
  7.            PageLoaded = true;
  8.            MonScriptLoad();
  9.        }
  10.    });
  11. }
  12. else
  13. {
  14.    if (!PageLoaded )
  15.    {
  16.        PageLoaded = true;
  17.        MonScriptLoad();    
  18.    }
  19. }


 
Et dans MonScriptLoad() je fais le traitement + le dispatchEvent().
 
Dans dans le script qui attend l'event :

Code :
  1. var PageLoaded = false;
  2.  
  3. if (document.readyState === "loading" ) {
  4.    document.addEventListener("DOMContentLoaded", (event) => {
  5.        if (!PageLoaded )
  6.        {
  7.            PageLoaded = true;
  8.            document.addEventListener("MonScriptReady", (event) => {
  9.               MonTrucAFaireSurEvent();    
  10.            });
  11.        }
  12.    });
  13. }
  14. else
  15. {
  16.    if (!PageLoaded )
  17.    {
  18.        PageLoaded = true;
  19.        document.addEventListener("MonScriptReady", (event) => {
  20.            MonTrucAFaireSurEvent();    
  21.        });    
  22.    }
  23. }


 
Ca a l'air de fonctionner :)


Message édité par rufo le 28-09-2023 à 18:05:07

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  Comportement d'événement Javascript bizarre

 

Sujets relatifs
[Javascript - React] useRef dans map() ne fonctionne pas[Javascript - Nodejs - Mongoose] Problème Fetch PUT form-data
[ksh] Mixture bizarre dans une chaine de caracteres - getoptsExercice html, php, mysql, javascript
Mediawiki : pb avec génération de javascript dans un articleComportement champ liste sélection multiple différent entre PHP5 et 8
Encodage RSA Javascript Vs JavaJavascript suggestion dans textarea
Javascript API / Recuperer le resultat[Javascript] - Supprimer un élément ajouté dynamiquement
Plus de sujets relatifs à : Comportement d'événement Javascript bizarre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR