HTML si l'image n'est pas trouvée


97

J'ai une image dans une page HTML:

<img src="smiley.gif" alt="Smiley face" width="32" height="32" />

Si l'image n'est pas trouvée sur le serveur, elle montre un vilain carré vide.

Je veux faire en sorte que si une image n'est pas trouvée, elle n'affichera rien ou une autre image par défaut dont je sais qu'elle se trouve définitivement sur le serveur.

Comment cela peut-il être fait?


2
Je reçois des favicons, certains sites n'en ont pas.
David19801

Dans ce cas, peut-être faire d'abord une demande côté serveur ou côté client pour voir quel code d'état revient?
Pekka

J'essaie de ne pas utiliser js parce que je n'aime pas les sites Web lents et qu'il y a trop de favicons pour le faire côté serveur, cela ferait interdire le serveur.
David19801

9
qui est l'idiot qui vous a dit que javascript ralentirait le site Web ??
Qchmqs

@Pekka 웃 Bien sûr, vous devriez avoir des liens fonctionnels sur le site. Et si les liens ne se trouvent pas sur votre propre site, mais sur celui de quelqu'un d'autre? Ou que se passe-t-il s'ils proviennent d'un magasin de données distant et prennent un certain temps à télécharger?
leetheguy

Réponses:


265

La meilleure façon de résoudre votre problème:

<img id="currentPhoto" src="SomeImage.jpg" onerror="this.onerror=null; this.src='Default.jpg'" alt="" width="100" height="120">

onerror est une bonne chose pour vous :)

Changez simplement le nom du fichier image et essayez vous-même.


4
Combiné avec une balise alt utile, c'est un excellent moyen de résoudre le problème!
mlibby

2
Incroyable! solution parfaite
Emanuele Pavanello

5
Si Default.jpg n'est pas disponible, vous vous retrouverez dans une boucle sans fin. Vous devriez ajouter un chèqueif (this.src != 'Default.jpg')
dehlen

7
Pour éviter les boucles infinies et mieux que le if: this.onerror=null;comme indiqué ci-dessous par @Sudarshan.
Guillaume F.

toute personne travaillant avec react, vous pouvez vous référer ici stackoverflow.com/questions/34097560
...

18

Eh bien, vous pouvez essayer ceci.

  <object data="URL_TO_Default_img.png" type="image/png">
   <img src="your_original_image.png" />
  </object>

cela a fonctionné pour moi. faites-moi savoir pour vous.


5
Semble fonctionne dans tous les principaux navigateurs. Échangez simplement la valeur par défaut et l'original. Pour que cet objet rende l'image originale et img par défaut
Evgeny

10

Ok, mais j'aime utiliser de cette façon, de sorte que chaque fois que l'image originale n'est pas disponible, vous pouvez charger votre image par défaut qui peut être votre smiley préféré ou une image disant Désolé! Non disponible, mais au cas où les deux images seraient manquantes, vous pouvez utiliser du texte pour les afficher. où vous pouvez aussi vous smiley alors. avoir un regard couvre presque tous les cas.

<img src="path_to_original_img/img.png"  alt="Sorry! Image not available at this time" 
       onError="this.onerror=null;this.src='<?=base_url()?>assets1/img/default.jpg';">

1
N'utilisez pas alt pour les textes d'erreur si vous voulez que la page soit correctement analysée par les moteurs de recherche. Les moteurs de recherche peuvent indexer vos données de contenu de manière incorrecte.
varela

Que fait <?=base_url()?>-on? Pourquoi ajoutez-vous étonnamment du code côté serveur et basé sur le framework?
Nico Haase

@NicoHaase son url à partir du framework php, eh bien, vous pouvez toujours écrire votre propre URL pour l'image, j'ai donné un exemple qui ne signifie pas que vous devez le copier et le coller ou vous concentrer sur cette URL, vous incluez votre URL que cela signifie. Pour expliquer, vous devez donner l'exemple, c'est ce que j'ai fait.
Sudarshan Kalebere

3

Voici l'extrait de code ci-dessous qui, dans ce cas, j'ai mal orthographié le nom de l'image. Donc, juste à cause de cela, il affiche l'image alternative comme image non trouvée (404.svg).

<img id="currentPhoto" src="https://www.ccrharrow.org/Images/content/953/741209.pg" onerror="this.src='https://www.unesale.com/ProductImages/Large/notfound.png'" alt="">


1

La manière habituelle de gérer ce scénario consiste à définir la altbalise sur quelque chose de significatif.

Si vous voulez une image par défaut à la place, je suggère d'utiliser une technologie côté serveur pour servir vos images, appelée en utilisant un format similaire à:

<img src="ImageHandler.aspx?Img=Blue.jpg" alt="I am a picture" />

Dans le ImageHandler.aspxcode, détectez toutes les erreurs de fichier non trouvées et diffusez votre fichier default.jpg.


1

Vous pouvez afficher un texte alternatif en ajoutant alt:

<img src="my_img.png" alt="alternative text" border="0" /> 

peut-être que ce carré vient du div (ou d'une autre balise) qui contient votre img
juankysmith

alt ne semble pas fonctionner si le style d'affichage img est 'block'
user3342930

1

J'ai ajouté un div parent autour de l'image et utilisé le gestionnaire d'événement onerror suivant pour masquer l'image d'origine car dans IE, il y avait toujours une image laide image introuvable après l'utilisation de l'attribut alt:

<div style=" width:300px; height:150px; float:left; margin-left:5px; margin-top:50px;">
        <img src='@Url.Content("~/Images/Logo-Left.png")' onerror="this.parentElement.innerHTML = '';" />
</div>

1

Pour l'alternative, si l'image n'existe pas, ne montrez rien du tout. (ce que je cherchais)

Vous pouvez permuter la fonction de la réponse de Robby Shaw dans l'attribut "onerror" à "this.remove ()".

<img id="currentPhoto" src="SomeImage.jpg" alt='1' width="100" height="120">
<img id="currentPhoto" src="SomeImage.jpg" onerror="this.onerror=null; this.remove();" alt="2" width="100" height="120">


0

Essayez d'utiliser border=0dans l' imgétiquette pour faire disparaître le carré laid.

<img src="someimage.png" border="0" alt="some alternate text" />


0

Je voulais cacher l'espace occupé par le <img>tag, donc cela a fonctionné pour moi

<img src = "source.jpg" alt = "" >


0

Si vous voulez une image alternative au lieu d'un texte, vous pouvez également utiliser php:

$file="smiley.gif";
$alt_file="alt.gif";
if(file_exist($file)){
     echo "<img src='".$file."' border="0" />";
}else if($alt_file){
     // the alternative file too might not exist not exist
     echo "<img src='".$alt_file."' border="0" />";
}else{
  echo "smily face";
}

0

moyen simple de gérer cela, ajoutez simplement une image d'arrière-plan.


0

essayez PHP

if (file_exists('url/img/' . $Image)) {
    $show_img_URL = "Image.jpg";
} else {
    $show_img_URL = "Image_not_found.jpg";
}

-1

cela fonctionne pour moi que si vous ne voulez pas utiliser l'attribut alt si l'image se brise, vous pouvez utiliser ce morceau de code et le définir en conséquence.

<h1>
  <a> 
   <object data="~/img/Logo.jpg" type="image/png">
     Your Custom Text Here
   </object>
  </a>
</h1>

-2

Celui-ci a fonctionné pour moi. en utilisant le srcset. Je viens de l'apprendre, donc je ne sais pas si les navigateurs le prennent en charge, mais cela a fonctionné pour moi. Essayez-le et donnez-moi plus tard votre avis.

 <img src="smiley.gif" srcset="alternatve.gif" width="32" height="32" />

-21

Solution - J'ai supprimé les éléments de hauteur et de largeur de l'image, puis le texte alternatif a fonctionné.

<img src="smiley.gif" alt="Smiley face" width="32" height="32" />

À

<img src="smiley.gif" alt="Smiley face" />

Merci à tous.


17
Donc vous vous êtes donné la "bonne réponse" mais vous avez répondu par une réponse sans rapport avec la question, GG WP.
Jean-Paul

oh ce gars a accepté sa propre réponse de toutes ces bonnes réponses hahaha, une bonne façon de se chérir.
Sudarshan Kalebere

Ce n'est pas la première fois: D stackoverflow.com/a/12768098/1545917
Ghilas BELHADJ

Cette réponse n'a pas fourni une image alternative.
Patrick Knott

@ david19801 voulez-vous expliquer?
P Satish Patro
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.