Czy istnieje sposób na określenie, czy ścieżka obrazu prowadzi do rzeczywistego obrazu, tj. Wykrywa, kiedy obraz nie ładuje się w JavaScript.
W przypadku aplikacji sieci Web analizuję plik xml i dynamicznie tworzę obrazy HTML z listy ścieżek obrazów. Niektóre ścieżki obrazów mogą już nie istnieć na serwerze, więc chcę z wdziękiem zawieść, wykrywając, które obrazy nie mogą się załadować i usuwając ten element HTML img.
Uwaga Rozwiązania JQuery nie będą mogły być używane (szef nie chce używać JQuery, tak, wiem, nie zaczynaj). Znam sposób w JQuery na wykrycie, kiedy obraz jest ładowany, ale nie wiem, czy się nie powiodło.
Mój kod do tworzenia elementów img, ale jak mogę wykryć, czy ścieżka img prowadzi do nieudanego załadowania obrazu?
var imgObj = new Image(); // document.createElement("img");
imgObj.src = src;
javascript
image
sazr
źródło
źródło
Odpowiedzi:
Możesz wypróbować następujący kod. Nie mogę jednak ręczyć za zgodność przeglądarki, więc musisz to przetestować.
I moje współczucie dla szefa odpornego na jQuery!
źródło
Odpowiedź jest ładna, ale wprowadza jeden problem. Zawsze, gdy przypisujesz
onload
lubonerror
bezpośrednio, może to zastąpić wywołanie zwrotne, które zostało przypisane wcześniej. Dlatego istnieje fajna metoda, która „rejestruje określony odbiornik w EventTarget, do którego jest wywoływany”, jak to mówią w MDN . Możesz zarejestrować dowolną liczbę słuchaczy na to samo wydarzenie.Przepiszę trochę odpowiedź.
Ponieważ proces ładowania zasobów zewnętrznych jest asynchroniczny, byłoby jeszcze przyjemniej używać nowoczesnego JavaScript z obietnicami, takimi jak poniższe.
źródło
To:
źródło
<img src="your/path/that/might/fail.png" onerror="$(this).hide();"/>
źródło
jQuery + CSS dla img
Z jQuery działa to dla mnie:
I mogę używać tego obrazu wszędzie w mojej witrynie, niezależnie od jej rozmiaru, z następującą właściwością CSS3:
CSS tylko dla background-img
W przypadku brakujących obrazów tła na każdej
background-image
deklaracji dodałem również następujące informacje :Strona serwera Apache
Innym rozwiązaniem jest wykrycie brakującego obrazu za pomocą Apache przed wysłaniem go do przeglądarki i zastąpienie go domyślną zawartością no-img.png.
źródło
Oto funkcja, którą napisałem dla innej odpowiedzi: Javascript Image Url Verify . I nie wiem, czy to jest dokładnie to, co trzeba, ale używa różnych technik, które byłoby użyć które obejmują teleskopowe dla
onload
,onerror
,onabort
oraz ogólny limit czasu.Ponieważ ładowanie obrazu jest asynchroniczne, wywołujesz tę funkcję ze swoim obrazem, a następnie wywołuje wywołanie zwrotne później z wynikiem.
źródło
tak jak poniżej:
źródło