Partage
  • Partager sur Facebook
  • Partager sur Twitter

Execution d'un script JS

Quand un script tiers est chargé

Sujet résolu
    2 novembre 2010 à 8:38:49

    Bonjour à tous,

    Mon problème est tout simple :
    Je cherche à exécuter une fonction Javascript, en provenance d'un script Javascript (sur lequel je n'ai "pas la main").
    Or, pour être sûr que la fonction est bien executée, j'ai été obligé de faire un try catch en boucle jusqu'à ce que soit executé mon script (appel de fonction).

    Existe-t-il une solution "propre" en Javascript, pour gérer le chargement de script tiers et ainsi lancer des appels aux fonctions contenues dans ce script ?

    Merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter

    Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

      2 novembre 2010 à 9:54:49

      Bah tu mets l'élément script avant le tien...

      Et sinon, au lieu de faire un try catch, tu teste la présence de la fonction désirée.
      ( function {
          function wait(  ) {
              if ( typeof taFonction !== "undefined" ) {
                  /* ton code */
              } else {
                  window.setTimeout( wait, 1000 );//si c'est urgent, tu mets moins de 1000ms
              }
          }
          wait( ):
      }( ) );
      


      Et je crois qu'on peut mettre un onload sur les éléments script.
      • Partager sur Facebook
      • Partager sur Twitter
        2 novembre 2010 à 10:39:04

        Merci pour ta réponse.

        Je suis un peu une bille en Javascript.
        Du coup ma question pourra sembler "conne"

        Voici ce que je comprends de ton script :
        Je crée une fonction "anonyme".
        Dedans je crée la fonction wait() :
        Si ma fonction "taFonction" n'est pas undefined, alors je fais mon appel
        Sinon j'attends 1000 millisecondes
        Je sors de la fonction wait()
        Et je rappelle la fonction wait()

        Cela signifie que si je passe dans le if() il faut que je mette une instruction pour sortir de la fonction wait(), sinon elle va être rappellée en boucle, non ?

        J'ai bien tout capté ? :)
        • Partager sur Facebook
        • Partager sur Twitter

        Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

          2 novembre 2010 à 14:14:38

          J'ai la flemme d'essayer de comprendre ce que tu racontes...
          Fais ton code et je te dirais si c'est bon.
          C'est pas bien compliqué, tu replaces /* ton code */ par tes instructions...
          • Partager sur Facebook
          • Partager sur Twitter
            2 novembre 2010 à 14:35:26

            Citation : mrjay42

            Merci pour ta réponse.

            Je suis un peu une bille en Javascript.
            Du coup ma question pourra sembler "conne"

            Voici ce que je comprends de ton script :
            Je crée une fonction "anonyme".
            Dedans je crée la fonction wait() :
            Si ma fonction "taFonction" n'est pas undefined, alors je fais mon appel
            Sinon j'attends 1000 millisecondes
            Je sors de la fonction wait()
            Et je rappelle la fonction wait()

            Cela signifie que si je passe dans le if() il faut que je mette une instruction pour sortir de la fonction wait(), sinon elle va être rappellée en boucle, non ?

            J'ai bien tout capté ? :)



            Tu crées une fonction anonyme, que tu exécuteras immédiatement (cf les parenthèses () ligne 10). On appelle ça une closure, c'est juste une astuce pour ne pas polluer l'espace global.


            Tu crées une fonction wait qui teste l'existence de la fonction. Si la fonction n'existe pas, la fonction wait sera relancée après 1000ms.

            On exécute une première fois la fonction wait.



            Je crois que tu avais à peu près compris.
            • Partager sur Facebook
            • Partager sur Twitter
              2 novembre 2010 à 14:58:02

              Waye >_<
              Je pensais que ce que tu décrivais, c'est comment s'en servir...
              C'est tellement rare les gens qui essayent de comprendre le code qu'on leur donne :/

              Je pense que t'as juste un loupé dans la compréhension du setTimeout.

              Citation

              Sinon j'attends 1000 millisecondes
              Je sors de la fonction wait()
              Et je rappelle la fonction wait()


              En fait, tu dis à l'ordinateur "lance cette fonction dans 1000 milli-secondes"
              puis tu sors de wait()
              puis il se passe plus rien, le processeur s'occupe d'autre chose
              puis au bout de 1000ms (ou plus), on recommence car la fonction est appelée
              • Partager sur Facebook
              • Partager sur Twitter
                2 novembre 2010 à 16:02:28

                Ah ben oui, en effet, mon but était d'être bien sûr d'avoir compris le code proposé
                Et en effet, je n'avais pas capté le fonctionnement du setTimeOut()

                Je suis une buse en JS :) Je pense que ça s'est vu.
                • Partager sur Facebook
                • Partager sur Twitter

                Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

                  2 novembre 2010 à 16:13:23

                  Si ton sujet est résolu, passe-le au vert ! ;)

                  Citation : xavierm02

                  C'est tellement rare les gens qui essayent de comprendre le code qu'on leur donne :/


                  +100000000
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 novembre 2010 à 16:44:27

                    Mon sujet n'est résolu que partiellement :)

                    J'ai posté pour dépanner un collègue qui se demandait comment faire les choses proprement.
                    Mais bon, la syntaxe proposée par xavierm02 est un peu hasardeuse, notamment autour du typeof me semble-t-il...Donc, j'attends confirmation de mon collègue

                    En tout cas, merci à vous pour vos réponses.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

                      2 novembre 2010 à 17:11:34

                      o_O
                      Absolument pas...

                      Si ta fonction n'est pas définie
                      if ( taFonction != undefined ) {
                      //ou
                              if ( taFonction ) {
                      

                      renvoieront une erreur...
                      ReferenceError: aze is not defined

                      Il faudrait que ta fonction soit déclarée avec var avant pour éviter ce bug... mais pourquoi le faire ?


                      typeof permet d'éviter ce bug car il renvoie "undefined" pour les variable non initialisées et les variables non déclarées.

                      Reste le === alors qu'un == aurait suffit.
                      === est plus rapide et évite les problèmes au niveau de la conversion automatique des types. Même si le problème de la conversion ne se pose pas dans ce cas, il faut quand même mieux l'utiliser.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 novembre 2010 à 18:06:52

                        Citation : mrjay42

                        Mais bon, la syntaxe proposée par xavierm02 est un peu hasardeuse, notamment autour du typeof me semble-t-il...



                        Il te semble mal.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          3 novembre 2010 à 7:17:05

                          Bon ben je vous remercie alors :)

                          Et merci à toi xavierm02, pour le code et pour les explications !
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

                          Execution d'un script JS

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown