|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 7 ![]() |
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. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 807 ![]() |
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 JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
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 |
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 7 ![]() |
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 :
Avec ma variable Chemin_Acces_Image : Code :
var Chemin_Acces_Image = "C:\\Users\\Test\\Desktop\\BG_Event.png?truc="; C'est peut être un peu particulier vu que c'est pour un gadget ? Merci. War10ck. |
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
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 |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 7 ![]() |
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 ? |
|
|
00
|
|
|
#7 | |
|
Membre expérimenté
![]() ![]() Duke Jikel Inscription : mai 2010 Messages : 340 ![]() |
Citation:
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. |
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
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 |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Étudiant Inscription : mai 2011 Messages : 7 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com