11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,
J'ai un petit problème de javascript pour une page qui actualise une image (de webcam)

Je vous donne ma fonction:


function maj_webcam(time, img_url)
{
	
        var d = new Date();
		var rfsh = "?"+d.getTime();
        
        if(img_url)
        {
			document.getElementById('webcam').src = img_url+rfsh;
	    }
	    else
	    {
	    	var img_url = document.getElementById('webcam').src;
	    }

	    setTimeout('maj_webcam('+time+','+img_url+')', time);  
}



et ma page html est visible sur http://camera.galphanet.ch

Le but est le suivant:
- Récupérer l'adresse de l'image
- Attendre 10 secondes
- Actualiser l'image en rajoutant le temps dans l'adresse (page.php?temps)

J'utilise un if else pour garder la variable img_url intacte (donc sans le temps précédent) et cela évite par la même occasion de faire deux requettes sur l'image lors du chargement de la page (autrement la page en fait une et le javascript en fait une autre)...

Mon problème est à deux endroits:
- Je n'arrive pas à passer deux variables sur
setTimeout('maj_webcam('+time+','+img_url+')', time); 

mais ceci fonctionne:
setTimeout('maj_webcam('+time+')', time); 


- La condition if(img_url) n'est jamais vraie...

Est-ce que vous pourriez éclairer ma lanterne svp ?

Merci à tous Smiley smile
Modifié par galphanet (01 Aug 2007 - 11:22)
'lu

img_url est un string ?


setTimeout('maj_webcam('+time+', "'+img_url+'")', time); 


tout simplement ? (rajouté les " autour de img url)

++
Tom
Hello,
blaaaaaaah a écrit :

setTimeout('maj_webcam('+time+', "'+img_url+'")', time); 

Ou encore mieux :
setTimeout(function() { maj_webcam(time, img_url); }, time);
Merci à vous deux,
le javascript fonctionne avec la solution de blaaaaaaah, par contre je comprends pas l'utilité de ce que propose Julien Royer, soit créer une nouvelle fonction pour en appeler une autre .. ?
galphanet a écrit :
par contre je comprends pas l'utilité de ce que propose Julien Royer, soit créer une nouvelle fonction pour en appeler une autre .. ?

L'intérêt, c'est que :
- C'est plus propre (le code est lu par l'interpréteur JS directement et non pas à chaque fois que tu appelles le setTimeout).
- C'est plus rapide (pour la même raison).
- Ca peut t'éviter des problèmes (par exemple dans le cas où img_url contient le caractère ").
<troll>
lu par l'interpreteur directement, ok, mais il recrée donc une fonction a chaque appel (nv contexte d'execution). Est-ce vraiment plus rapide qu'un eval qui va faire un simple appel de fonction ?
</troll>
(ma question n'en reste pas moins véritable)

Par contre je m'incline pour le pb du " dans l'url.
blaaaaaaah a écrit :
Est-ce vraiment plus rapide qu'un eval qui va faire un simple appel de fonction ?

A priori, setTimeout avec une chaîne de caractère en premier paramètre n'est pas un simple eval mais bien également une création de fonction :
setTimeout('maj_webcam('+time+', "'+img_url+'")', time);
// est équivalent à
setTimeout(new Function('maj_webcam('+time+', "'+img_url+'")'), time);