305 votes

Saisie d’une image par défaut au cas où l’arribut src d’un fichier HTML <img> n'est pas valide?

Est-il possible de restituer une image par défaut dans une balise HTML <img> , dans le cas où l'attribut src n'est pas valide (en utilisant uniquement du code HTML)? Sinon, quelle serait votre façon légère de contourner le problème?

357voto

Patrick McElhaney Points 22093

Vous avez demandé une solution uniquement HTML ...

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html lang="en">
<head>
<title>Object Test</title>
</head>
<body>   

  <object data="http://stackoverflow.com/does-not-exist.png" type="image/png">
    <img src="http://stackoverflow.com/content/img/so/logo.png" />
  </object>

</body>
</html>
 

Comme la première image n’existe pas, le repli (logo Stack Overflow) s’affiche. Et si vous utilisez un très vieux navigateur qui ne prend pas en charge object , il ignorera simplement cette balise et utilisera la balise img .

354voto

Svend Points 3291

Cela fonctionne bien pour moi. Peut-être que vous voulez utiliser JQuery pour accrocher l'événement.

 <img src="foo.jpg" onerror="this.src='error.jpg';">
 

80voto

amit bakle Points 331

Trouvé cette solution dans Spring in Action 3rd Ed.

<img src="../resources/images/Image1.jpg" onerror="this.src='../resources/images/none.jpg'" />

15voto

lambacck Points 4955
 <style type="text/css">
img {
   background-image: url('/images/default.png')
}
</style>
 

Assurez-vous de saisir les dimensions de l’image et indiquez si vous souhaitez que l’image soit mosaïque ou non.

15voto

Pim Jager Points 20018

Je ne pense pas qu'il soit possible d'utiliser uniquement du code HTML. Cependant, l'utilisation de javascript devrait être faisable. Bassicly on boucle sur chaque image, teste si elle est complète et si c'est naturelWidth est zéro alors cela signifie qu'il n'est pas trouvé. Voici le code:

 fixBrokenImages = function( url ){
    var img = document.getElementsByTagName('img');
    var i=0, l=img.length;
    for(;i<l;i++){
        var t = img[i];
        if(t.naturalWidth === 0){
            //this image is broken
            t.src = url;
        }
    }
}
 

Utilisez-le comme ceci:

  window.onload = function() {
    fixBrokenImages('example.com/image.png');
 }
 

Testé sous Chrome et Firefox

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X