IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Pb de tempo sur onLoad()


Sujet :

JavaScript

  1. #1
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut Pb de tempo sur onLoad()
    Bonjour à tous,

    Sur l'événement onLoad d'une balise <body>, j'ai plusieurs traitements à faire, dont un fichier XML à parser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      [...]
      var root = g_xmlParser.selectSingleNode( "." );
      var cat = root.getElementsByTagName( "category" )[ 0 ];
    Or getElementsByTagName ne fonctionne pas tout le temps.
    Message sous IE : "les données nécessaires pour cette opération n'ont pas encore été récupérées".

    Evidemment, si je mets un alert( "hhh" ) avant, les choses s'améliorent. Je pourrais donc contourner le problème en mettant un temporisateur de 100 ou 200 msec. Mais je n'aime pas trop ces "solutions" à coups de magic numbers, qui manquent de robustesse (et de clarté pour mes successeurs sur le code). Connaissez-vous un moyen propre de règler ça ?

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    SetTimeOut pourrait t'interresser ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(function,  delay);

  3. #3
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    C'est ce que j'utilise pour faire le temporisateur en effet. Mais justement, il y a un magic number là dedans, pour le délai. En fait, pour reformuler ma question autrement, je me demandais plutôt s'il n'y avait pas un moyen sûr de savoir qu'une page a fini de se charger ? Car alors, je pourrais lancer mes actions après cette notification

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    j'utilise deux methodes bourrin ...
    la premier j'initialise une variable dans le head et je la modifie en fin de page et je teste la variable dasn un setInterval ...

    sinon je créé dynamiquement avec un createElement on objet en fin de page et je teste son exisatnce dans un setinterval ...

  5. #5
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Ca n'est pas très différent du setTimeout() finalement. Bon, on va faire avec, alors

    Maintenant, variante de la question précédente, parce qu'en réalité le problème est un peu plus copmpliqué que ça. J'aurais du le préciser tout de suite, mais le "root" concerné n'est pas celui de la page HTML. C'est l'élément racine d'un document XML lu par le Javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var g_xmlParser = new ActiveXObject( "Microsoft.XMLDOM" );
    [...]
    if ( ! g_xmlParser.load( "GetSynListXml.xml" ) ) {
      alert( "Impossible de lire le XML" );
      return;
    }
     
    var root = g_xmlParser.selectSingleNode( "." );
    var cat = root.getElementsByTagName( "category" )[ 0 ];
    [...]
    L'idée de placer un flag pour tester la fin du load ne marche donc pas ici. Soit dit en passant, je trouve surprenant que la méthode load() du MS-XML3 parser renvoie true avant d'avoir chargé tout le document...

  6. #6
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Finalement, j'ai règle le problème en plaçant en tête de mon fichier js (et en dehors de tout appel de fonction) l'initialisation du XMLParser.

    Enfin, quand je dis "règlé", je ne sais pas si c'est vraiment règlé, ou si c'est juste contourné, puisque j'ignore quelle sont les normes concernant la synchronisation des js et du HTML au chargement.

    M'enfin, dans l'attente de la prochaine catastrophe, ça laisse toujours un peu de temps pour continuer à ramer...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mozzila style sur OnLoad
    Par filip56 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/06/2008, 13h49
  2. Réponses: 0
    Dernier message: 09/06/2008, 09h29
  3. [Requete SQL] Tempo sur une requete d'action
    Par userB dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/09/2007, 14h35
  4. question sur onLoad()
    Par Flobel dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 09/12/2004, 16h50
  5. Realiser une tempo sur microcontrolleur
    Par Goetz dans le forum C
    Réponses: 20
    Dernier message: 03/11/2003, 23h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo