2012-09-06 16 views
5

Sto aggiungendo immagini per una tela HTML5 utilizzando Javascript:Rileva se l'immagine è rotto in Javascript

img = new Image(); 
img.addEventListener('load', loadCallBack, false); 
img.src = image_url; 

E poi loadCallBack disegna l'immagine.

Il problema è che a volte lo image_url si riferisce a un'immagine spezzata o inesistente. Quando ciò accade, ottengo un errore 404 nella console e l'immagine sulla tela rimane bianca. Invece, mi piacerebbe essere in grado di sostituire l'attributo src dell'immagine con un altro image_url.

Ho provato quanto segue e non ha funzionato:

img.addEventListener("error", function(){console.log("404");}); 

Come posso rilevare i 404s delle immagini?

Nota: Sto ancora cercando una soluzione, poiché nessuno dei due postati finora ha funzionato.

+1

Il ' l'evento error' sembra funzionare (almeno in Chrome): http://jsfiddle.net/qgJRF/ – bfavaretto

+0

Ho modificato il titolo; La classe javascript di 'Image()' esisteva molto prima di HTML5 (chiarimento). Dato che hai citato la tela, ho lasciato il tag HTML5 con la tua domanda. – Christian

+0

Ma suona come questa domanda: http://stackoverflow.com/questions/92720/jquery-javascript-to-replace-broken-images – LonelyWebCrawler

risposta

4

Lavori in jQuery per me ... http://jsfiddle.net/5v2qG/

img = new Image(); 
$(img).bind('error', function() { 
     alert('error called');             
}); 
img.src = "invalid_img_name.png";​ 
+0

Sto cercando di far funzionare entrambe le soluzioni, grazie. – LonelyWebCrawler

+0

Purtroppo non riesco a farlo funzionare. – LonelyWebCrawler

+0

@LonelyWebCrawler stai usando jQuery? dovrebbe funzionare finché si allega il gestore di eventi .bind() PRIMA di provare a caricare un'immagine src. – Kostia

10

Lo stesso codice di risposta del Kostia: solo per confrontare la bruttezza di jQuery e la bellezza di javascript vaniglia:

+5

Ricorda che l'assegnazione diretta al gestore onner sovrascriverà qualsiasi altro gestore di eventi di errore che potrebbe essere assegnato. Probabilmente non è un problema per i casi semplici - ma il più delle volte è meglio usare img.addEventListener ("errore" ... - anche se poi devi gestire tutti i problemi di cross browser con addEventListener. –