*** Settings *** Documentation Fonctions et méthodes de traitement *** Keywords *** Wait Until All JavaScript Finished [Tags] utils [Documentation] Vérifie 3 conditions qui sont censées indiquer ensemble ... que toutes les requètes réseau et traitements JavaScript sont finis. ... 1. Pas de requète XHR/Ajax en cours (partie réseau, pas callbacks) ... 2. Ressources de la page chargées (css, images) qui sinon n'est pas ... convert par les autres vérifications. ... 3. Message(event) queue vide. ... On vérifie que tous les évenements *déclenchés* sont finis: onClick, ... onChange, onLoad, etc et n'importe quel callback en attente. Pas ... ceux qui attendent un timer(setTimeout) ou le retour d'une XHR. ... Quand le timer/XHR finisent, là les callbacks sont mis dans la queue. ... https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#Adding_messages ... Attention: ne prend pas en compte le cas d'un traitement déclenché par ... un setTimeout(). Si les 3 conditions passent à true avant que le timer ... soit fini, c'est perdu ! ... Dépends de jQuery pour 1. mais il doit y avoir moyen de faire sans. ${js}= catenate SEPARATOR=\n ... // 1. ... if($.active !== 0) return false; ... // ... // 2. ... if(document.readyState !== "complete") return false; ... // ... // 3. Pour ce faire, on ajoute un message dans la queue et on attend ... // qu'il soit traité. ... // Le flag est stocké sur window pour en faire une variable globale. ... setTimeout(function() { window.allEventsFinished = true }, 0); ... if(window.allEventsFinished !== true) return false; ... // ... // On met le flag à null pour que cela puisse servir plus d'une fois. ... // Ce qui est utile en cas d'alternance d'XHR et callbacks où on risque ... // d'avoir besoin que le check 2 et 3 bloquent alternativement. ... window.allEventsFinished = null; ... return true; // Tout devrait être terminé! Wait For Condition ${js} ${TIMEOUT}