2012-01-26 14 views
27

kiedy umieszczam tag img, tworzę atrybut src dynamicznie. Czy istnieje sposób testowania czy src (ścieżka gdzie obraz znajduje) faktycznie istnieje w javascript, aby zapobiec jej wystąpieniu:zobacz, czy src z img istnieje

enter image description here

+2

może warto rozważyć przy użyciu skryptu po stronie serwera, aby sprawdzić, czy to jako przeglądarki mogą mieć wyłączony javascript. – rogerlsmith

+0

Zdefiniuj "faktycznie istnieje".Ze względu na zasady pochodzenia między domenami nie będzie można sprawdzić obrazów, które przeglądarka pobiera z witryny zdalnej przy użyciu Javascript, więc to, o co prosisz, może być niemożliwe. Możesz wysłać adres URL do serwera i go pobrać plik, ale jest to zły pomysł z punktu widzenia bezpieczeństwa. – Borealid

+0

Znalazłem ten wpis. To powinno ci pomóc. http://www.irt.org/script/52.htm –

Odpowiedz

58

Można użyć zdarzenia error:

var im = document.getElementById('imageID'); // or select based on classes 
im.onerror = function(){ 
    // image not found or change src like this as default image: 

    im.src = 'new path'; 
}; 

Inline Wersja:

<img src="whatever" onError="this.src = 'new default path'" /> 

Albo

<img src="whatever" onError="doSomething();" /> 

<img> tag obsługuje tych zdarzeń:

  • abort (onAbort)
  • error (onError)
  • load (onLoad)

Więcej informacji:

+0

Widziałem na innych forach, że to nie działa w IE, czy to prawda? –

+0

@Mr: Działa dla mnie: http://jsbin.com/egohud – Sarfraz

+0

Dobrze, dzięki! Prawdopodobnie wcześniejsze wersje, kto wie xD dzięki. –

10

można dokonać wcześniejszej rozmowy AJAX (z head metody) i zobaczyć kod zwrotny serwer lub użyć onerror zdarzenie, aby zmienić adres URL lub ukryć, np

<img src="notexist.jpg" onerror="this.style.visibility = 'hidden'"> 

(Użyłem atrybut inline tylko wyjaśnić ideę)

+0

Wspaniały przykład. Działa jak marzenie. –

0

Teraz zbliża to w niewłaściwy sposób.
Po wygenerowaniu linków za pomocą skryptu po stronie serwera sprawdź, czy plik istnieje, czy nie (na przykład za pomocą file_exists() w PHP).

Nie należy polegać na JavaScript, gdy można to zrobić po stronie serwera, ponieważ JavaScript można zmienić i wyłączyć.

Zadaj sobie pytanie, w jaki sposób generujesz atrybuty src= i sprawdź, czy plik istnieje i czy nie, i podaj alternatywę.

4

Jeśli tworzysz src dynamicznie z javascript można użyć to:

var obj = new Image(); 
 
    obj.src = "http://www.javatpoint.com/images/javascript/javascript_logo.png"; 
 

 
if (obj.complete) { 
 
    alert('worked'); 
 
} else { 
 
    alert('doesnt work'); 
 
}

+1

Obraz istnieje w następującej ścieżce, ale po uruchomieniu kodu uruchamia się komunikat "nie działa". Czy to z powodu "polityki tego samego pochodzenia"? – yalpertem

+0

to dlatego, że obj.complete zwraca wartość false. kod zostanie natychmiast wykonany. podczas gdy państwo nie jest jeszcze gotowe. więc zawsze iść do innego bloku –

Powiązane problemy