Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/03/2011, 15h20   #1
Invité régulier
 
Inscription : août 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 32
Points : 6
Points : 6
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 :
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 :
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.
bk313142 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2011, 20h19   #2
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 932
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 932
Points : 4 752
Points : 4 752
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 :
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 :
<SCRIPT language="JavaScript"
pour
Code :
<script type="text/javascript"
NoSmoking est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/03/2011, 22h41   #3
Invité régulier
 
Inscription : août 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 32
Points : 6
Points : 6
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 :
<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.
bk313142 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 07h46   #4
Invité régulier
 
Inscription : août 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 32
Points : 6
Points : 6
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 :
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
bk313142 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 08h31   #5
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 932
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 932
Points : 4 752
Points : 4 752
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 :
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";
NoSmoking est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h33   #6
Invité régulier
 
Inscription : août 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 32
Points : 6
Points : 6
Bonjour,

C'est exactement ce que j'ai fait , en tout cas je crois, voici le code que j'ai utilisé:
Code :
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 :
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";
bk313142 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h09   #7
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 932
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 932
Points : 4 752
Points : 4 752
sûrement un temps de chargement du script trop long
mets la dernière ligne en commentaire pour voir
Code :
//  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
NoSmoking est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h31   #8
Invité régulier
 
Inscription : août 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 32
Points : 6
Points : 6
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
bk313142 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 18h00   #9
Invité régulier
 
Inscription : août 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 32
Points : 6
Points : 6
Bonjour NoSmoking,

Donc j'ai vérifié et effectivement ton code fonctionne très bien.
Voici donc le code final:
Code :
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
bk313142 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h29.


 
 
 
 
Partenaires

Hébergement Web