2013-10-15 8 views
6

YouTube restituisce 404 per miniature non esistenti, ma restituisce anche dati di immagine validi (miniatura video rotti), quindi controllando con Immagine non funziona, onerror non viene chiamato:Come rilevare quando un link immagine restituisce 404, MA è ancora un'immagine valida

var img = new Image(); 
img.onload = function() { alert("found")}; 
img.onerror = function() { alert("not found") }; 
img.src = "http://img.youtube.com/vi/aaaa/1.jpg"; 

Quando viene eseguito, dice "trovato". C'è un modo per rilevare 404 se i dati dell'immagine possono essere effettivamente caricati?

È anche un bene se shomehow può essere rilevato che il link restituisce i dati di immagine di anteprima "broken video" standard di YouTube.

+0

si potrebbe fare attraverso le intestazioni HTTP, ma ti costerà un viaggio di andata e ritorno. http://stackoverflow.com/questions/220231/accessing-the-web-pages-http-headers-in-javascript. ps; lo identificheresti con un codice di risposta http 404 e un tipo di contenuto di immagine/jpeg. –

+0

@ Marvin Smit: ma poi devo fare una richiesta AJAX verso YouTube, no? Perché ho bisogno delle intestazioni dell'immagine di YouTube, non di quelle del documento corrente. E non posso inviare una richiesta Ajax a YouTube, a causa della stessa restrizione della politica di origine. – Tom

+0

Possibile solo se è possibile controllare le intestazioni 'Access-Control-Allow-Origin', che potrebbe essere un'opzione none accanto al round trip aggiuntivo per questo, che è molto probabile che sia costosa. –

risposta

1

Come soluzione approssimativa ma funzionante in questo caso, suggerirei di controllare le dimensioni dell'immagine al caricamento. Di solito le miniature sono più grandi, quindi se l'immagine restituita è 120x90px, si può supporre che sia l'immagine 404.

L'unico altro modo sarà quello di caricarlo tramite uno script PHP che può controllare le intestazioni HTTP prima di passare attraverso l'immagine.

+0

È un peccato, ma penso che tu abbia ragione. Ho appena provato qualcosa di simile: http://stackoverflow.com/questions/26630650/detect-404-error-on-page-load ma ha provocato un errore di dominio incrociato: / – DAB

Problemi correlati