2013-10-15 2 views
6

Youtube gibt 404 für nicht vorhandene Miniaturbilder zurück, aber es gibt auch gültige Bilddaten zurück (gebrochenes Video-Thumbnail), so dass es mit Image nicht funktioniert, onerror heißt nicht:Wie erkennt man, wenn ein Bild Link 404 zurückgibt, aber es ist immer noch ein gültiges Bild

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"; 

Wenn ausgeführt dann heißt es "gefunden". Gibt es eine Möglichkeit, 404 zu erkennen, wenn die Bilddaten tatsächlich geladen werden können?

Es ist auch gut, wenn es shomehow festgestellt werden kann, dass der Link die Standard Youtube "gebrochenen Video" thumbnail Bilddaten zurückgibt.

+0

Sie könnten es über die HTTP-Header tun, aber es kostet Sie eine Rundreise. http://stackoverflow.com/questions/220231/accessing-the-web-pages-http-headers-in-javascript. ps; Sie würden es mit einem HTTP-Response-Code von 404 und einem Inhaltstyp von image/jpeg identifizieren. –

+0

@Marvin Smit: aber dann muss ich eine AJAX Anfrage an youtube machen, oder? Weil ich die Header des Youtube-Bildes benötige, nicht die des aktuellen Dokuments. Und ich kann keine ajax-Anfrage an youtube senden, wegen der gleichen ursprünglichen Richtlinienbeschränkung. – Tom

+0

Nur möglich, wenn Sie die Header 'Access-Control-Allow-Origin' steuern können. Dies ist möglicherweise keine Option neben dem zusätzlichen Roundtrip, der sehr wahrscheinlich kostspielig ist. –

Antwort

1

Als grober, aber funktionierender Workaround in diesem Fall würde ich vorschlagen, die Bildgröße bei Belastung zu überprüfen. Normalerweise sind die Thumbnails größer. Wenn das zurückgegebene Bild also 120x90px groß ist, können Sie davon ausgehen, dass es sich um das 404-Bild handelt.

Der einzige andere Weg wird sein Laden über ein PHP-Skript, das die HTTP-Header vor dem Durchlaufen des Bildes überprüfen kann.

+0

Das ist eine Schande, aber ich denke du hast Recht. Ich habe gerade so etwas versucht: http://stackoverflow.com/questions/26630650/detect-404-error-on-page-load, aber es führte zu einem Cross-Domain-Fehler: / – DAB

Verwandte Themen