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 :

Insérer un script d'appel vers un compteur (Aide pour un innerHTML)


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2009
    Messages : 36
    Points : 17
    Points
    17
    Par défaut Insérer un script d'appel vers un compteur (Aide pour un innerHTML)
    Bonjour à tous,

    J'utilise un compteur sur une page web (qui fonctionne) à l'aide d'un script inline.
    J'aimerais pouvoir transférer cet appel dans un fichier JS externe déjà existant.
    Voici le code HTML et JS externe actuel...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    HTML
    <body onLoad=gen_hits()>
    ...
    <span id='hits'></span><SCRIPT language="JavaScript" SRC="http://www.mycompany.com/cgi-bin/counterdir/gcount.pl?NUMBER=../../otherdir/counter"></SCRIPT>
    ...
    <script type="text/javascript" src="js/ini.js"></script>
    </body>
    
    JAVASCRIPT EXTERNE (ini.js)
    var hits="HITS ";
    
    function gen_hits() {
    document.getElementById("hits").innerHTML=hits;
    }
    Et voici une "idée" de ce que j'essaye de faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    HTML
    <body onLoad=gen_hits()>
    ...
    <span id='hits'></span>
    ...
    <script type="text/javascript" src="js/ini.js"></script>
    </body>
    
    JAVASCRIPT EXTERNE 
    var hits="HITS " + <SCRIPT language="JavaScript" SRC="http://www.mycompany.com/cgi-bin/counterdir/gcount.pl?NUMBER=../../otherdir/counter"></SCRIPT>;
    
    function gen_hits() {
    document.getElementById("hits").innerHTML=hits;
    }
    Je n'arrive pas à formater l'url de la version dans JS pour que cela fonctionne.
    (Sauf si je fais appel à document.write mais dans ce cas il remplace tout le contenu de ma page, bien sûr...)


    Quelqu'un aurait une idée ? Moi je m'arrache les cheveux depuis 2 jours...

    Un grand merci.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Bien le bonjour le chauve,
    à voir ton code on peut présumer que ton script ne fait qu'un document.write( variable).

    Pour le passer dans un fichier extérieur, d'ailleurs pourquoi en fait?, il faut l'ajouter en dynamique sur le onload du document.
    Oui mais le document.write, effaçant tout, il faut également détourner la méthode write, et la restaurer ce qui n'est pas une obligation d'ailleurs.

    Je te livres un petit exemple de ce qui est faisable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>[addScript]</title>
    <style type="text/css">
    #recup{
      color : red;
    }
    </style>
    <script type="text/javascript">
    function addScript(){
      // sauve la fonction
      var saveWrite = document.write;
      // detournement de la fonction
      document.write = function(){
        var oSpan = document.getElementById('recup');
        oSpan.innerHTML = arguments[0];
      };
      // recup du head
      var oHead = document.getElementsByTagName('HEAD')[0];
      // create element SCRIPT
      var oScript = document.createElement('SCRIPT');
      // affectation
      oScript.type = "text/javascript";
      oScript.text = document.write(' Bien le Bonjour! ');
      // ajout dans la head
      oHead.appendChild( oScript);
      // je ne me rappelles plus pourquoi il faut le supprimer
      oHead.removeChild( oScript);
      // restaure optionnel sur un document.write
      setTimeout( function(){ document.write = saveWrite}, 1000);
    }
    </script>
    </head>
    <body onload="addScript();">
    <p>Lorem ipsum dolor sit amet, <span id="recup"></span> consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam.</p>
    </body>
    </html>
    PS :
    quoiqu'il arrive abandonne cette syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <SCRIPT language="JavaScript"
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript"

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2009
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    Bonjour, bonjour,

    Dans l'ordre (d'importance):

    1- pour le chauve, j'ai mis 10 min à piger (J'ai compris en relisant mon post jusqu'en bas)
    2- Pour la syntaxe, je me suis planté en tapant mon code résumé mais j'utilise effectivement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript"
    Mais merci malgré tout d'y avoir pensé.

    3- Pour ta question (à laquelle je m'attendais) à propos du pourquoi un fichier externe, simple et je vais essayer de faire court:
    ... J'utilise un seule page html pour tout le site qui comporte plusieurs rubriques et sous-menu supposés arriver sur des pages différentes.
    ... Comme je déteste les chargements de pages il n'y en a qu'une seule (index.htm), le html ne comporte que des <SPAN>...</SPAN> ,div, class,id etc... pour toutes les données.
    ... Ce qui donne un head qui n'a que l'appel au fichier CSS pour tous les graphismes et mise en page, un body avec les fameux <span>... et un juste avant la fin de body qui comporte les appels aux scripts externes.
    ... je dis AUX scripts externes car il y en a 2, le premier pour les datas textes et le second tout ce qui concerne images et jQuery.

    Et donc le pourquoi est que le css est ultra rapide, l'affichage du design aussi, les textes encore plus rapides et après seulement jQuery peut démarrer.

    Mais, comme au milieu du code html il y a ce <SCRIPT lang... ...counter"></SCRIPT> qui traîne tout seul, et durant le chargement, j'ai toutes les tables, couleurs, logos qui s'affichent ainsi que ce p..... de chiffre venant du compteur (car bien entendu il s'exécute durant le chargement de la page) tout seul en plein milieu étant donné que l'affichage des textes ne démarre que juste avant </body>... Et là, ça m'énnerve.
    Comme en plus, il y a un texte juste avant le chiffre (visites 123 ou hits 123... etc selon la langue du site) et que lui provient de ini.js, il n'est donc visible que plus tard, c'est moche.

    Voilà, c'est pas grave, c'est rapide et vraiment furtif, mais moi je le vois, je le sais et à présent je ne vois plus que ça mais je trouve également que ça ne fait pas sérieux.

    4- Pour le code que tu m'as fourni en réponse à mon post, je ne l'ai pas encore lu et je ferai cela demain à tête reposée car là ça fait une bonne douzaine d'heure que je suis sur le site (Pas uniquement sur ce problème, je te rassure) et je fatigue.

    En tout cas un grand merci d'avance et demain je regarderai, essayerai et te tiendrai au courant...

    Encore merci
    G.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2009
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    Salut NoSmoking,

    Voilà, j'ai essayé ton code mais sans succès.
    Le script n'est pas executé et n'affiche donc aucune valeur.

    J'ai trouvé un bout de code qui "commence" à fonctionner mais il y a quand-même des soucis, le voici...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <script type="text/javascript">
            function setInnerHTMLAndExecScript (element, html) {
                            var newElement = element.cloneNode(false);
                            newElement.innerHTML = html;
                            element.parentNode.replaceChild(newElement, element);
     
                    }
     
            function loadDiv() {
     
                    var myHtml = '<script type="text\/javascript" SRC="http://www.mycompany.com/cgi-bin/counterdir/gcount.pl?NUMBER=../../otherdir/counter"><\/script>';
                    setInnerHTMLAndExecScript(document.getElementById('myDiv'),myHtml);
    				<!-- alert(""); -->
            }
    </script>
     
    <body onload="loadDiv();">
            <span id='myDiv'></span>
    </body>
    ...Les soucis sont que sous IE cela n'affiche rien et sous Firefox il affiche la valeur incrémentée correctement mais n'arrête (il me semble) jamais de faire comme si le chargement était encore en cours et je suis donc obligé de refermer la fenêtre à chaque fois, plus moyen de faire un refresh ou reload de la page.
    Donc ce bout de code n'est pas parfait mais fournit un début de piste.
    Voilà, avis aux amateurs plus éclairés que moi en la matière car perso, même si je me débrouille pas trop mal, à ce stade, je bloque...

    Merci

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Citation Envoyé par bk313142
    Voilà, j'ai essayé ton code mais sans succès.
    un rapide test ma montré qu'il fonctionne bien pourtant.

    Comment l'as tu intégré ?

    Il va de soit que dans ton cas il faut ajouter l'initialisation de la src du script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // affectation
    oScript.type = "text/javascript";
    // C'ETAIT POUR L'EXEMPLE   oScript.text = document.write(' Bien le Bonjour! ');
    oScript.src = "http://www.mycompany.com/cgi-bin/counterdir/gcount.pl?NUMBER=../../otherdir/counter";

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2009
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    C'est exactement ce que j'ai fait , en tout cas je crois, voici le code que j'ai utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    function gen_hits(){
      var saveWrite = document.write;
      document.write = function(){
        var oSpan = document.getElementById('hits');
        oSpan.innerHTML = arguments[0];
      };
     
      var oHead = document.getElementsByTagName('HEAD')[0];
      var oScript = document.createElement('SCRIPT');
      oScript.type = "text/javascript";
      oScript.src = "http://www.mycompany.com/cgi-bin/counterdir/gcount.pl?NUMBER=../../otherdir/counter";
      oHead.appendChild( oScript);
      oHead.removeChild( oScript);
      setTimeout( function(){ document.write = saveWrite}, 1000); 
    }
    Et donc dans IE il n'affiche rien et dans Firefox après le timeout il me remplace la page existante par une nouvelle page avec la valeur du compteur (correcte) et en plus il continue à "loader" à l'infini.

    Gino.


    Citation Envoyé par NoSmoking Voir le message
    un rapide test ma montré qu'il fonctionne bien pourtant.

    Comment l'as tu intégré ?

    Il va de soit que dans ton cas il faut ajouter l'initialisation de la src du script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // affectation
    oScript.type = "text/javascript";
    // C'ETAIT POUR L'EXEMPLE   oScript.text = document.write(' Bien le Bonjour! ');
    oScript.src = "http://www.mycompany.com/cgi-bin/counterdir/gcount.pl?NUMBER=../../otherdir/counter";

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    sûrement un temps de chargement du script trop long
    mets la dernière ligne en commentaire pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //  setTimeout( function(){ document.write = saveWrite}, 1000);
    si c'est bon il suffira de mettre la restitution de la fonction original sur le onload du script

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2009
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    Bon, je crois que j'ai compris.
    Le nom de domaine est chez Neodomaine et renvoie à un sous-domaine d'un autre site.
    Le site est redirigé vers ce sous-domaine chez l'hébergeur réel.

    Quand j'utilise le www.nombidon.com ça foire, quand j'utilise le lien hébergé (sousdomaine.vrainom.com) ça fonctionne.
    Enfin pour Firefox, pas pour IE.

    J'ai été jeter un coup d'oeil au code source tel qu'il arrive et il y a des tas de trucs en plus de la page initiale.

    Mais de toute façon comme ça tire tellement en long et que maintenant va falloir en plus trouver de nouvelles solutions à de nouveaux problèmes, je crois que je vais laisser ce bidule inline car pour un simple compteur cela devient assez ridicule la façon dont je m'acharne...

    Je pense, sauf solution miracle, que c'est le mieux.

    Désolé et un grand merci malgré tout
    Gino

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2009
    Messages : 36
    Points : 17
    Points
    17
    Par défaut
    Bonjour NoSmoking,

    Donc j'ai vérifié et effectivement ton code fonctionne très bien.
    Voici donc le code final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    //Code de ini.js
    function gen_hits(){
      var saveWrite = document.write;
      document.write = function(){
        var oSpan = document.getElementById('hits');
        oSpan.innerHTML = arguments[0];
      };
     
      var oHead = document.getElementsByTagName('HEAD')[0];
      var oScript = document.createElement('SCRIPT');
      oScript.type = "text/javascript";
      oScript.src = "http://www.mycompany.com/cgi-bin/counterdir/gcount.pl?NUMBER=../../otherdir/counter";
      oHead.appendChild( oScript);
      oHead.removeChild( oScript);
      setTimeout( function(){ document.write = saveWrite}, 1000); 
    }
     
    //Code HTML
    <body onLoad=gen_hits()>
    ...
    <span id='hits'></span>
    ...
    <script type="text/javascript" src="js/ini.js"></script>
    </body>
    Un tout grand merci.

    Gino

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

Discussions similaires

  1. [Bat]Script en appelant plusieurs autres ???
    Par Baptiste Wicht dans le forum Windows
    Réponses: 7
    Dernier message: 29/06/2007, 18h28
  2. Un script du php vers l'asp
    Par gayom dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2007, 20h01
  3. script case, redirigé vers url extérieure
    Par nath70 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 14
    Dernier message: 11/10/2006, 15h58
  4. [Upload] Php : script d'Upload vers mon site : Big Probleme
    Par CyberTwister dans le forum Langage
    Réponses: 8
    Dernier message: 27/03/2006, 08h06
  5. Script Java appelé dans Xsl sans résultats
    Par metallic dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 03/08/2005, 15h39

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