HTML, jeśli nie znaleziono obrazu


99

Mam obraz na stronie HTML:

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

Jeśli obraz nie zostanie znaleziony na serwerze, pokazuje brzydki pusty kwadrat.

Chcę, aby jeśli obraz nie został znaleziony, nie wyświetlił niczego lub innego domyślnego obrazu, o którym wiem, że znajduje się na serwerze.

Jak można to zrobić?


2
Dostaję favicony, niektóre strony ich nie mają.
David19801

W takim przypadku może najpierw wykonać żądanie po stronie serwera lub klienta, aby zobaczyć, jaki kod stanu wraca?
Pekka

Próbuję nie używać js, ponieważ nie lubię powolnych witryn i jest zbyt wiele faviconów, aby to zrobić po stronie serwera, serwer zostałby zbanowany.
David19801

9
kto jest idiotą, który powiedział ci, że javascript spowolni działanie witryny?
Qchmqs

@Pekka 웃 Oczywiście powinieneś mieć działające linki na stronie. A co, jeśli linki nie są w Twojej witrynie, ale w witrynie innej osoby? A co, jeśli pochodzą ze zdalnego magazynu danych i ich pobranie zajmuje trochę czasu?
leetheguy

Odpowiedzi:


269

Najlepszy sposób na rozwiązanie problemu:

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

onerror to dla ciebie dobra rzecz :)

Po prostu zmień nazwę pliku obrazu i spróbuj sam.


4
W połączeniu z przydatnym tagiem alt to świetny sposób na rozwiązanie problemu!
mlibby

2
Niesamowity! idealne rozwiązanie
Emanuele Pavanello

5
Jeśli Default.jpg nie jest dostępny, skończysz w niekończącej się pętli. Powinieneś dodać czekif (this.src != 'Default.jpg')
dehlen

7
Aby uniknąć nieskończonych pętli i lepiej niż if: this.onerror=null;jak podano poniżej przez @Sudarshan.
Guillaume F.

każdy, kto pracuje z reaguje, może
polecić

18

Cóż, możesz tego spróbować.

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

to działało dla mnie. daj mi znać o sobie.


5
Wydaje się, że działa we wszystkich głównych przeglądarkach. Po prostu zamień domyślne i oryginalne. Tak więc ten obiekt renderuje oryginalny obraz i domyślny obraz img
Evgeny

10

Ok, ale lubię używać tego sposobu, aby za każdym razem, gdy oryginalny obraz nie był dostępny, można załadować domyślny obraz, który może być Twoim ulubionym uśmieszkiem lub obrazem z napisem Przepraszamy! Niedostępne, ale w przypadku, gdy brakuje obu obrazów, możesz użyć tekstu do wyświetlenia. gdzie możesz wtedy też się uśmiechnąć. spójrz na prawie każdy przypadek.

<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
Nie używaj alt dla tekstów błędów, jeśli chcesz, aby strony były poprawnie analizowane przez wyszukiwarki. Wyszukiwarki mogą nieprawidłowo indeksować dane dotyczące treści.
varela,

Co robi <?=base_url()?>? Dlaczego zaskakująco dodajesz kod po stronie serwera i oparty na strukturze?
Nico Haase

@NicoHaase swój adres URL z frameworka php, cóż, zawsze możesz napisać własny adres URL obrazu, podałem przykład, który nie oznacza, że ​​powinieneś go skopiować i wkleić lub skoncentrować się na tym adresie URL, dołączasz swój adres URL, co oznacza. Aby wyjaśnić, musisz podać przykład, więc zrobiłem.
Sudarshan Kalebere

3

Tutaj Sprawdź poniższy fragment kodu, w którym brakuje mi nazwy obrazu. Tak więc tylko z tego powodu pokazuje alternatywny obraz jako obraz nie znaleziony (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

Zwykłym sposobem na obsłużenie tego scenariusza jest ustawienie altznacznika na coś znaczącego.

Jeśli zamiast tego chcesz uzyskać obraz domyślny, sugeruję użycie technologii po stronie serwera do wyświetlania obrazów, o nazwie przy użyciu formatu podobnego do:

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

W ImageHandler.aspxkodzie wyłap wszelkie błędy związane z nieodnalezieniem pliku i wyświetl default.jpgzamiast tego swój plik .


1

Możesz wyświetlić tekst alternatywny, dodając alt:

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

może ten kwadrat pochodzi z div (lub innego tagu), który zawiera Twój img
juankysmith

alt nie działa, jeśli styl wyświetlania img to „blok”
JohnFlux

1

Dodałem nadrzędny element div dookoła obrazu i użyłem następującego modułu obsługi zdarzeń onerror, aby ukryć oryginalny obraz, ponieważ w IE nadal był brzydki obraz-nie znaleziono obrazu wyświetlany po użyciu atrybutu 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

Alternatywnie, jeśli obraz nie istnieje - w ogóle nic nie pokazuj. (czego szukałem)

Możesz zamienić funkcję z odpowiedzi Robby'ego Shawa w atrybucie „onerror” na „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

Spróbuj użyć border=0w imgtagu, aby brzydki kwadrat zniknął.

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


0

Chciałem ukryć miejsce zajmowane przez <img>tag, więc to zadziałało

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


0

Jeśli chcesz mieć alternatywny obraz zamiast tekstu, możesz równie dobrze użyć 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

wypróbuj PHP

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

-1

dla mnie działa tak, że jeśli nie chcesz używać atrybutu alt, jeśli obraz się zepsuje, możesz użyć tego fragmentu kodu i odpowiednio ustawić.

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

-2

Ten pracował dla mnie. używając srcset. Właśnie się o tym dowiedziałem, więc nie wiem, czy przeglądarki go obsługują, ale zadziałało. Spróbuj, a później daj mi swoją opinię.

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

-21

Rozwiązanie - usunąłem elementy wysokości i szerokości z img, a tekst alt działał.

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

DO

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

Dziękuję wam wszystkim.


18
Więc podałeś sobie „poprawną odpowiedź”, ale odpowiedziałeś odpowiedzią niezwiązaną z pytaniem, GG WP.
Jean-Paul

och, ten facet przyjął własną odpowiedź spośród wszystkich poprawnych odpowiedzi hahaha, dobry sposób na pielęgnowanie siebie.
Sudarshan Kalebere,


Ta odpowiedź nie dostarcza alternatywnego obrazu.
Patrick Knott

@ david19801 chcesz wyjaśnić?
P Satish Patro
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.