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 30/06/2011, 18h54   #1
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : mai 2011
Messages : 7
Points : 0
Points : 0
Par défaut Plusieurs Background pour un même nom

Bonjour,

Je développe actuellement un gadget et j'ai crée une fonction qui toutes les X secondes vient actualiser le Background.

Le problème c'est que je souhaite faire en sorte que ce Background change, et donc j'ai plusieurs images différentes.

Quand je leur donne le nom BG.png, si celui a déjà été chargé avant, la nouvelle image qui a ce nouveau nom n'est pas chargée. JS vient remettre la dernière image qu'il connait sous le nom de BG.png.

Exemple :

Une image avec un arbre nommée BG.png.
Lancement de la fonction ( document.getelementbyid ) qui charge BG.png
Nouvelle image avec une maison nommée BG.png qui remplace la première.
Lancement de la fonction qui charge à nouveau l'arbre alors que l'image a changé.


Je sais pas ce qu'il faut faire pour vider cette "mémoire".

Merci.

War10ck.
War17ck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 19h02   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 797
Points : 35 797
JavaScript n'y est pour rien, c'est le navigateur qui va d'abord vérifier dans le cache si l'image a déjà été téléchargée. Or pour lui, seul le nom sert de référence. Un moyen pour forcer la mise à jour (en dehors de donner des noms différents, qui serait plus cohérent) serait de "modifier" l'URL en lui ajoutant un paramètre GET unique (souvent un timestamp) qui permet de dire au navigateur que l'image dépend de ce paramètre et donc de l'actualiser :
Code :
document.getElementById('tonElement').style.backgroundImage = 'url(BG.png?tt='+new Date().getTime()+')';
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 19h04   #3
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Je pense que c'est lié au cache. Dans ce cas, il suffit de rajouter un paramètre quelconque, mais toujours différent, à l'url des images. Par exemple :
Code HTML :
<img src="BG.png?truc=123456789" />

Avec ou sans paramètre, le serveur enverra bien l'image, mais le navigateur considère ça comme un objet différent et donc n'utilise pas son cache.

Utilise la fonction Math.random() pour rajouter ce paramètre dans ta fonction d'actualisation, tu as une probabilité quasi-nulle d'avoir deux fois la même valeur chez le même visiteur.



Edit: argh, encore grillé '^^
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 22h34   #4
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : mai 2011
Messages : 7
Points : 0
Points : 0
Merci d'avoir répondu si vite.

J'ai viens de tester cette méthode mais du coup il affiche plus l'image puisque le nom est changé.


Voici ma fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
if (fso.FileExists(Chemin_Acces_Image) == 0 )
{
    System.Gadget.background = "";
    System.Gadget.background = "../images/BG.png";
 
 
}
if (fso.FileExists(Chemin_Acces_Image) == 1)
{
    System.Gadget.background = "";
    System.Gadget.background = Chemin_Acces_Image + Math.floor(Math.random()*100);
 
}

Avec ma variable Chemin_Acces_Image :

Code :
var Chemin_Acces_Image = "C:\\Users\\Test\\Desktop\\BG_Event.png?truc=";
Mais il fait même plus les changements maintenant.

C'est peut être un peu particulier vu que c'est pour un gadget ?

Merci. War10ck.
War17ck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 23h57   #5
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
C'est particulier, oui, mais pas parce que c'est un gadget. C'est particulier parce que tu utilises un chemin de fichier local.

Je vois que tu utilises FSO… Est-ce simplement pour faire tes tests en local ? Si oui, je te conseille plutôt un serveur local comme WAMP ou encore EasyPHP. Sinon, je ne peux pas t'aider
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 15h07   #6
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : mai 2011
Messages : 7
Points : 0
Points : 0
Oui ici c'est pour tester en local, mais pour le gadget, l'image sera sur un réseau du type "\\RESEAU\\Img\\BG.png"

Donc la méthode du Math.random() ne fonctionne pas avec une image sur réseau ?
War17ck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 22h06   #7
Membre expérimenté
 
Duke Jikel
Inscription : mai 2010
Messages : 340
Détails du profil
Informations personnelles :
Nom : Duke Jikel

Informations forums :
Inscription : mai 2010
Messages : 340
Points : 548
Points : 548
Citation:
Envoyé par War17ck Voir le message
Oui ici c'est pour tester en local, mais pour le gadget, l'image sera sur un réseau du type "\\RESEAU\\Img\\BG.png"

Donc la méthode du Math.random() ne fonctionne pas avec une image sur réseau ?
C'est quoi ce "Gadget" ? un truc codé pour une page web ou pour une appli du genre desktop. Tu pourrais nous en dire plus ?
Si j'étais toi j'appellerai plutôt toutes les resources depuis un serveur en HTTP. Et non via du file:, tu est en train de te planter un clou dans le pied.
dukej est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2011, 01h44   #8
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
C'est pas dit que ça marche pas. Comme les paramètres GET sont vieux comme le monde, peut-être que le serveur de fichiers du réseau de War17ck saura les interpréter. Ce qui est moins évident, c'est que le navigateur en fasse quelque chose de bon alors que l'URL n'est pas spécifiée en http://.

Mais ça vaut le coup d'essayer… Sinon moi je propose de pas se prendre la tête et de donner carrément des noms de fichiers différents aux images. Ça sera quand même plus simple que changer le protocole de tout le réseau…
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 17h18   #9
Invité de passage
 
Homme
Étudiant
Inscription : mai 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : mai 2011
Messages : 7
Points : 0
Points : 0
Oui je vais vous expliquer :

C'est un gadget Vista. Il doit être installé sur tous les pc de mon entreprise.

Chaque Gadget aura sa propre image de base dans ses ressources.

Néanmoins, la gadget, par lui même va vérifier si, sur le réseau de l'entreprise il n'y a pas une image ( du nom de BG.png ) qui existe. Si cette image existe, elle viendra remplacer l'image de base.

Mais si cette image BG.png venait à changer, bah le gadget affichera toujours la première image BG.png qu'il connait.

J'ai essayé en Local de mettre un Math.random() à la fin, mais en faisant ça, il n'y a plus aucune image qui s'affiche ( logique puisque c'est un nom différent ).

War10ck.
War17ck est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h51.


 
 
 
 
Partenaires

Hébergement Web