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 :

Image.complete == true mais l'image n'est pas affichée


Sujet :

JavaScript

  1. #1
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut Image.complete == true mais l'image n'est pas affichée
    Bonjour à tous,

    sur une page, je souhaite recharger toutes les images qui n'ont pas été correctement chargées au premier essai (utile sur les pages en contenant beaucoup, notamment si elles sont générées à la volée par le serveur).

    Je parcours donc toutes mes images, et les teste via image.complete. Malheureusement, toutes les images, y compris celles qui sont non affichées (le alt est affiché à la place) ont pour attribut .complete == true .

    So ... help !
    -- Yankel Scialom

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    teste a la fois le complete et les dimensions ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Ça m'a traversé l'esprit, mais les images peuvent être de dimension de même ordre que le texte alt affiché ...
    -- Yankel Scialom

  4. #4
    Invité
    Invité(e)
    Par défaut
    peut etre que avec onload sa marchera surtout avec ie (probleme de cache)


  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 46
    Points : 80
    Points
    80
    Par défaut
    J'opterais aussi pour les évènements onload, onerror et onabort, j'ai eu ce cas et je ne sais plus pourquoi précisément, mais j'avais écarté la propriété complete.

    Je crois me souvenir avoir lu qqpart que cette propriété passait à true quand le navigateur considérait qu'il avait fini l'action de chargement de l'image, qu'elle ait échoué ou non : une propriété relativement inutile, donc !

    Je cherche en même temps que je rédige, et tout ce que je trouve dit exactement le contraire de ce que j'affirme, pourtant je suis (presque) sûr de ne pas (encore) être zinzin

  6. #6
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Étant donné que je cherche à détecter les images non chargées, la propriété onload me semble particulièrement inappropriée ...
    Te souviens-tu si tu étais parvenu à trouver un discriminant équivalent ? Merci de ton aide.
    -- Yankel Scialom

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 46
    Points : 80
    Points
    80
    Par défaut
    onabort et onerror. Mais du coup, ça te fait surveiller deux évènements par image dans la page, ça ne semble pas très judicieux, non ?
    Et puis en plus, il faut passer l'écouteur avant de commencer le chargement de l'image, donc ça va pas pour ton cas.
    Je continue demain, je vais essayer d'éplucher les frameworks, qui doivent bien avoir trouvé une parade pour fiabiliser cette propriété sous FF.

  8. #8
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    J'ai répondu un peu vite tout à l'heure et je m'en excuse. La solution à base de onerror semble prometteuse, j'ai utilisé une fonction similaire : .error() fournie par jQuery. Le code qui suit rafraichit toutes les images correspondant au selector tant que celles-ci ne sont pas affichées (dans une limite de maxReload).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    // Condition de sélection des images traitées
    var selector = '#minipage-content img.thumb';
    var maxReload = 15;
     
    // Rafraîchissement d'une image non chargée
    function refreshById(id) {
       var img = $(selector)[id]; 
       var reloadIndex = img.src.search(/&reload=[0-9]+/);
       if(reloadIndex<0) {
          img.src += '&reload=1';
       } else {
          var reloadDataIndex = reloadIndex+String('&reload=').length;
          var reload = parseInt(img.src.slice(reloadDataIndex));
          if(reload++ > maxReload) return;
          img.src = img.src.slice(0,reloadDataIndex) + reload;
       }
    }
     
    // Toutes les images sont rechargées lorsqu'une erreur est détectée
    $().ready(function() {
       $(selector).each(function(id) {
          $(this).error(function() {
             refreshById(id);
          }, function(){});
       });
    });
    Je vous remercie de commenter ma méthode et de me proposer une amélioration si vous en voyez une.

    -- Yankel Scialom

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    je n'ai pas saisi ton selecteur ?
    ou est la collection des images en erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $("img").error(function(){
      var imgsrc= $(this).attr('src')
       var timestamp = new Date().getTime();
       $(this).attr('src',imgsrc+'?'+timestamp);
    });
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Salut,
    mon sélecteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var selector = '#minipage-content img.thumb';
    sélectionne toutes les images de classe thumb contenue dans l'élément d'id minipage-content.

    Ensuite, une fois l'arbre DOM parsé, je surveille les événements onerror/onabort de chacune dedites images ; lorsqu'un tel événement survient j'applique à l'image la fonction refreshById :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $(selector).each(function(id) {
       $(this).error(function() {
          refreshById(id);
       });
    });
    Cette fonction refreshById modifie l'attribut src de l'image incriminée en y ajoutant &reload=1 ou en incrémentant la variable reload de son url (les images sont des images créées à la volée par le serveur, leur url est donc déjà de la forme http://adresse/script?var=val).
    Au bout d'un certain nombre de tentative, on abandonne.


    Concernant le choix $(img).attr('src') / img.src, que conseilles-tu ? Quelles sont les différences ?


    Nota : il faudrait vraiment une balise code inline pour les petits bouts de code


    Merci encore.
    -- Yankel Scialom

  11. #11
    Invité
    Invité(e)
    Par défaut
    en gros si j'ai bien compris seul les images mal affiché son recharger et pour eviter les problemes de cache on modifie le src de l'image afin de forcer le navigateur a recharger l'image en lui faisant croire que c'est une nouvelle image

  12. #12
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    C'est exactement mon but. Mais comme à chaque fois que je code en javascript, la solution que je trouve me semble brouillon. Je voulais donc savoir s'il y avait plus élégant. Une idée te viens en tête ?

    Merci.
    -- Yankel Scialom

  13. #13
    Invité
    Invité(e)
    Par défaut
    je me suis deja pris la tete avec ces histoires de prechargement et selon mois ce que tu considere comme brouillon n'en est pas un mais plutot une solution afin de contourner une lacune qu'on les navigateurs

  14. #14
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    peut-être un script a faire en pur js ( sans lib ) et à ajouter dans la faq ?
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  15. #15
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Pourquoi pas si ça peut servir à d'autres. Comment faire pour proposer un bout de code ?
    -- Yankel Scialom

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Commence par le poster dans les contributions
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Le onclick return true mais le href n'est pas appelé ! IE m'a tué..
    Par Erdividium dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 11/07/2013, 16h19
  2. Réponses: 2
    Dernier message: 09/10/2009, 19h25
  3. Réponses: 9
    Dernier message: 17/09/2009, 22h57
  4. mettre une deuxieme image de fond si la premiere n'est pas assez grande
    Par cleytus dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/06/2009, 16h20
  5. la première image de ma page n'est pas affichée par Firefox
    Par Alexdezark dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 13/01/2009, 17h13

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