HTML, wenn das Bild nicht gefunden wird

96

Ich habe ein Bild in einer HTML-Seite:

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

Wenn das Bild nicht auf dem Server gefunden wird, wird ein hässliches leeres Quadrat angezeigt.

Ich möchte es so gestalten, dass, wenn ein Bild nicht gefunden wird, nichts oder ein anderes Standardbild angezeigt wird, von dem ich weiß, dass es sich definitiv auf dem Server befindet.

Wie kann das gemacht werden?

David 19801
quelle
2
Ich bekomme Favoriten, einige Websites haben sie nicht.
David19801
Führen Sie in diesem Fall möglicherweise zuerst eine serverseitige oder clientseitige Anforderung durch, um festzustellen, welcher Statuscode zurückkommt.
Pekka
Ich versuche, js nicht zu verwenden, weil ich langsame Websites nicht mag und es zu viele Favoriten gibt, um es serverseitig zu tun. Dadurch würde der Server gesperrt.
David19801
9
Wer ist der Idiot, der dir gesagt hat, dass Javascript die Website langsam macht?
Qchmqs
@ Pekka 웃 Natürlich sollten Sie funktionierende Links auf der Website haben. Was ist, wenn sich die Links nicht auf Ihrer eigenen Website befinden, sondern auf der einer anderen Person? Oder was ist, wenn sie aus einem Remote-Datenspeicher stammen und das Herunterladen eine Weile dauert?
Leetheguy

Antworten:

265

Der beste Weg, um Ihr Problem zu lösen:

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

onerror ist eine gute Sache für dich :)

Ändern Sie einfach den Namen der Bilddatei und versuchen Sie es selbst.

Robby Shaw
quelle
4
In Kombination mit einem nützlichen Alt-Tag ist dies eine großartige Möglichkeit, das Problem zu lösen!
mlibby
2
Tolle! perfekte Lösung
Emanuele Pavanello
5
Wenn Default.jpg nicht verfügbar ist, geraten Sie in eine Endlosschleife. Sie sollten einen Scheck hinzufügenif (this.src != 'Default.jpg')
Dehlen
7
Um Endlosschleifen zu vermeiden und besser als das if: this.onerror=null;wie unten von @Sudarshan angegeben.
Guillaume F.
Wenn
Earlee
17

Nun, du kannst es versuchen.

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

das hat bei mir funktioniert. Lass es mich über dich wissen.

Sudarshan Kalebere
quelle
4
Scheint in allen gängigen Browsern zu funktionieren. Tauschen Sie einfach Standard und Original aus. Das Objekt rendert also das Originalbild und img das Standardbild
Evgeny
10

Ok, aber ich verwende diese Methode gerne, damit Sie, wenn das Originalbild nicht verfügbar ist, Ihr Standardbild laden können, das möglicherweise Ihr Lieblings-Smiley oder Bild ist und "Sorry!" Sagt. Nicht verfügbar, aber falls beide Bilder fehlen, können Sie Text zur Anzeige verwenden. wo kannst du dann auch smiley. Schauen Sie sich fast jeden Fall an.

<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';">
Sudarshan Kalebere
quelle
1
Verwenden Sie alt nicht für Fehlertexte, wenn die Seite von Suchmaschinen korrekt analysiert werden soll. Suchmaschinen können Ihre Inhaltsdaten falsch indizieren.
Varela
Was macht <?=base_url()?>das Warum fügen Sie überraschenderweise serverseitigen und Framework-basierten Code hinzu?
Nico Haase
@NicoHaase seine URL aus dem PHP-Framework, nun, Sie können immer Ihre eigene URL für das Bild schreiben. Ich habe ein Beispiel gegeben, das nicht bedeutet, dass Sie es kopieren und einfügen oder sich auf diese URL konzentrieren sollten. Sie geben Ihre URL an, die es bedeutet. Um zu erklären, muss man ein Beispiel geben, also habe ich es getan.
Sudarshan Kalebere
3

Hier Überprüfen Sie unten das Code-Snippet, in dem ich den Bildnamen falsch geschrieben habe. Nur aus diesem Grund wird das alternative Bild als nicht gefundenes Bild (404.svg) angezeigt.

<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="">

krishna amarghade
quelle
1

Die übliche Methode, um mit diesem Szenario umzugehen, besteht darin, das altTag auf einen sinnvollen Wert zu setzen.

Wenn Sie stattdessen ein Standardbild möchten, empfehle ich die Verwendung einer serverseitigen Technologie zum Bereitstellen Ihrer Bilder, die in einem ähnlichen Format wie das folgende aufgerufen wird:

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

ImageHandler.aspxFangen Sie im Code alle nicht gefundenen Dateifehler ab und stellen Sie default.jpgstattdessen Ihre bereit.

Widor
quelle
1

Sie können einen alternativen Text anzeigen, indem Sie Folgendes hinzufügen alt:

<img src="my_img.png" alt="alternative text" border="0" /> 
Juankysmith
quelle
Vielleicht kommt dieses Quadrat von der div (oder einem anderen Tag), die Ihren img
juankysmith
alt scheint nicht zu funktionieren, wenn der img-Anzeigestil 'block' ist
user3342930
1

Ich habe ein übergeordnetes Div um das Bild hinzugefügt und den folgenden onerror-Ereignishandler verwendet, um das Originalbild auszublenden, da im IE nach Verwendung des alt-Attributs immer noch ein hässliches Bild angezeigt wurde, das nicht gefunden wurde:

<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>
Patrick Koorevaar
quelle
1

Für die Alternative, wenn das Bild nicht existiert - zeigen Sie überhaupt nichts. (was ich gesucht habe)

Sie können die Funktion von Robby Shaws Antwort im Attribut "onerror" gegen "this.remove ()" austauschen.

<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">

Bim
quelle
0

Versuchen Sie es border=0in derimg Tag, damit das hässliche Quadrat verschwindet.

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

Aziz Shaikh
quelle
0

Ich wollte den Platz, den das <img>Tag einnimmt, verstecken, damit das für mich funktioniert

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

Divyanshu Jimmy
quelle
0

Wenn Sie ein alternatives Bild anstelle eines Textes möchten, können Sie auch PHP verwenden:

$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";
}
stephen komu
quelle
0

Einfacher Weg, um dies zu handhaben, fügen Sie einfach ein Hintergrundbild hinzu.

vikas dhere
quelle
0

versuchen Sie es mit PHP

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

Es funktioniert für mich, wenn Sie das Alt-Attribut nicht verwenden möchten, wenn das Bild unterbrochen wird, können Sie diesen Code verwenden und entsprechend festlegen.

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

Dieser hat für mich gearbeitet. mit dem srcset. Ich habe gerade davon erfahren, daher weiß ich nicht, ob Browser es unterstützen, aber es hat bei mir funktioniert. Probieren Sie es aus und geben Sie mir später Ihr Feedback.

 <img src="smiley.gif" srcset="alternatve.gif" width="32" height="32" />
stephen komu
quelle
-21

Lösung - Ich habe die Höhen- und Breitenelemente des Bilds entfernt und dann hat der Alternativtext funktioniert.

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

ZU

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

Danke euch allen.

David 19801
quelle
17
Sie haben sich also die "richtige Antwort" gegeben, aber Sie haben mit einer Antwort geantwortet, die nichts mit der Frage zu tun hat: GG WP.
Jean-Paul
Oh, dieser Typ hat seine eigene Antwort aus all diesen richtigen Antworten akzeptiert, hahaha, ein guter Weg, sich selbst zu schätzen.
Sudarshan Kalebere
Es ist nicht das erste Mal: ​​D stackoverflow.com/a/12768098/1545917
Ghilas BELHADJ
Diese Antwort lieferte kein alternatives Bild.
Patrick Knott
@ david19801 willst du das erklären?
P Satish Patro