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 :

Plusieurs Background pour un même nom


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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
    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.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 098
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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é '^^
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 098
    Par défaut
    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
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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
    Par défaut
    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 ?

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    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.

  8. #8
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 098
    Par défaut
    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…
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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
    Par défaut
    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.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/12/2008, 15h22
  2. Plusieurs valeurs pour un même champ
    Par will89 dans le forum Requêtes
    Réponses: 32
    Dernier message: 14/06/2006, 10h06
  3. Problème pour différencier plusieurs select avec le même nom
    Par vallica dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/04/2006, 11h35
  4. Réponses: 8
    Dernier message: 05/12/2005, 14h43
  5. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27

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