HTML se l'immagine non viene trovata


97

Ho un'immagine in una pagina HTML:

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

Se l'immagine non viene trovata sul server, mostra un brutto quadrato vuoto.

Voglio fare in modo che se un'immagine non viene trovata non visualizzi nulla o qualche altra immagine predefinita che so essere sicuramente sul server.

Come si può fare?


2
Ricevo favicon, alcuni siti non le hanno.
— David19801

In tal caso, magari eseguire prima una richiesta lato server o lato client per vedere quale codice di stato ritorna?
— Pekka

Sto cercando di non usare js perché non mi piacciono i siti Web lenti e ci sono troppe favicon per farlo lato server, il server verrebbe bannato.
— David19801

9
chi è l'idiota che ti ha detto che javascript rallenterà il sito ??
— Qchmqs

@Pekka 웃 Ovviamente dovresti avere collegamenti funzionanti sul sito. E se i link non sono sul tuo sito, ma su quello di qualcun altro? O se provengono da un archivio dati remoto e impiegano un po 'di tempo per il download?
— leetheguy

Risposte:


265

Il modo migliore per risolvere il tuo problema:

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

onerror è una buona cosa per te :)

Basta cambiare il nome del file immagine e provare tu stesso.


4
Combinato con un utile tag alt, questo è un ottimo modo per risolvere il problema!
— mlibby

2
Sorprendente! soluzione perfetta
— Emanuele Pavanello

5
Se Default.jpg non è disponibile, finirai in un ciclo infinito. Dovresti aggiungere un assegnoif (this.src != 'Default.jpg')
— dehlen

7
Per evitare loop infiniti e migliori this.onerror=null;dell'if : come indicato di seguito da @Sudarshan.
— Guillaume F.

tutti coloro che lavorano con reagisce, è possibile fare riferimento qui stackoverflow.com/questions/34097560/...
— Earlee

17

Bene, puoi provare questo.

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

questo ha funzionato per me. fammi sapere di te.


4
Sembra funziona in tutti i principali browser. Basta scambiare predefinito e originale. In modo che l'oggetto renda l'immagine originale e quella predefinita img
— Evgeny

10

Ok ma mi piace usare in questo modo, in modo che ogni volta che l'immagine originale non è disponibile puoi caricare la tua immagine predefinita che potrebbe essere la tua faccina preferita o l'immagine che dice Scusa! Non disponibile, ma nel caso in cui mancano entrambe le immagini è possibile utilizzare il testo da visualizzare. dove puoi anche sorridere allora. dare un'occhiata copre quasi ogni caso.

<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
Non utilizzare alt per i testi di errore se desideri che la pagina venga analizzata correttamente dai motori di ricerca. I motori di ricerca potrebbero indicizzare i dati sui contenuti in modo errato.
— varela

Cosa fa <?=base_url()?>? Perché sorprendentemente aggiungi del codice lato server e basato su framework?
— Nico Haase

@NicoHaase il suo URL dal framework php, beh puoi sempre scrivere il tuo URL per l'immagine, ho fornito un esempio che non significa che dovresti copiarlo e incollarlo o concentrarti su quell'URL, includi il tuo URL che significa. Per spiegare devi dare l'esempio così ho fatto.
— Sudarshan Kalebere

3

Qui controlla sotto lo snippet di codice che, in questo, ho scritto male il nome dell'immagine. Quindi, proprio per questo, mostra l'immagine alternativa come immagine non trovata (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

Il modo usuale per gestire questo scenario è impostare il alttag su qualcosa di significativo.

Se invece desideri un'immagine predefinita, ti suggerisco di utilizzare una tecnologia lato server per offrire le tue immagini, chiamata utilizzando un formato simile a:

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

Nel ImageHandler.aspxcodice, individua eventuali errori di file non trovato e pubblica il tuo default.jpg.


1

Puoi mostrare un testo alternativo aggiungendo alt:

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

forse questo quadrato proviene dal div (o da un altro tag) che contiene la tua img
— juankysmith

alt non sembra funzionare se lo stile di visualizzazione img è "block"
— user3342930

1

Ho aggiunto un div genitore attorno all'immagine e ho usato il seguente gestore di eventi onerror per nascondere l'immagine originale perché in IE c'era ancora un'immagine brutta immagine non trovata mostrata dopo aver usato l'attributo 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

In alternativa, se l'immagine non esiste, non mostrare assolutamente nulla. (cosa stavo cercando)

Puoi scambiare la funzione dalla risposta di Robby Shaw nell'attributo "onerror" a "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

Prova a usare border=0nel imgtag per far sparire il brutto quadrato.

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


0

Volevo nascondere lo spazio occupato dal <img>tag, quindi questo ha funzionato per me

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


0

Se vuoi un'immagine alternativa invece di un testo, puoi anche usare 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

modo semplice per gestire questo, basta aggiungere un'immagine di sfondo.


0

prova PHP

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

-1

Per me funziona che se non vuoi usare l'attributo alt se l'immagine si interrompe, puoi usare questo pezzo di codice e impostare di conseguenza.

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

-2

Questo ha funzionato per me. utilizzando srcset. L'ho appena imparato, quindi non so se i browser lo supportano, ma ha funzionato per me. Provalo e poi restituiscimi il tuo feed.

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

-21

Soluzione: ho rimosso gli elementi di altezza e larghezza di img e quindi il testo alternativo ha funzionato.

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

PER

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

Grazie a tutti.


17
Quindi ti sei dato la "risposta corretta" ma hai risposto con una risposta non correlata alla domanda, GG WP.
— Jean-Paul

oh questo ragazzo ha accettato la sua risposta da tutte queste risposte corrette hahaha, un buon modo per prendersi cura di sé.
— Sudarshan Kalebere


Questa risposta non ha fornito un'immagine alternativa.
— Patrick Knott

@ david19801 cura di spiegare?
— P Satish Patro
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.