quando inserisco un tag img, creo dinamicamente l'attributo src. Esiste un modo di test se lo src (percorso in cui si trova l'immagine) in realtà esiste con javascript al fine di evitare di ottenere:vedi se src of img esiste
risposta
È possibile utilizzare l'evento 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 Versione:
<img src="whatever" onError="this.src = 'new default path'" />
O
<img src="whatever" onError="doSomething();" />
<img>
tag supporta i seguenti eventi:
abort
(OnAbort)error
(onerror)load
(onLoad)
Ulteriori informazioni:
Ho visto in altri forum che non funziona in IE, è corretto? –
@Mr: Funziona per me: http://jsbin.com/egohud – Sarfraz
Giusto, grazie! Probabilmente versioni precedenti, chissà xD grazie. –
è possibile effettuare una precedente chiamata ajax (con head
metodo) e vedere il codice di ritorno del server oppure è possibile utilizzare onerror
evento per modificare url o renderlo nascosto, ad es
<img src="notexist.jpg" onerror="this.style.visibility = 'hidden'">
(ho usato l'attributo in linea solo per spiegare l'idea)
Impressionante esempio. Funziona come un fascino. –
ci si avvicina nel modo sbagliato.
Quando si generano i collegamenti con lo script lato server, controllare lì se il file esiste o meno (utilizzando file_exists()
in PHP, ad esempio).
Non si deve fare affidamento su JavaScript quando è possibile farlo sul lato server, poiché JavaScript può essere modificato e disabilitato.
Chiedetevi come si generano gli attributi src=
e verificare se il file esiste o meno e fornire un'alternativa.
Se si crea lo src dinamicamente con javascript è possibile utilizzare questo:
var obj = new Image();
obj.src = "http://www.javatpoint.com/images/javascript/javascript_logo.png";
if (obj.complete) {
alert('worked');
} else {
alert('doesnt work');
}
L'immagine esiste nel seguente percorso, ma quando si esegue lo snippet di codice viene visualizzato 'no worky'. È a causa della "stessa politica di origine"? – yalpertem
perché, obj.complete restituisce false. il codice viene eseguito immediatamente. mentre lo stato non è ancora completo. quindi va sempre in altro blocco –
si può prendere in considerazione utilizzando uno script lato server per verificare la presenza di questo come i browser possono avere javascript disabilitato. – rogerlsmith
Definire "effettivamente esiste".A causa della politica di origine dei domini incrociati, non sarà possibile esaminare le immagini recuperate dal browser dal sito remoto utilizzando Javascript, pertanto ciò che si richiede potrebbe essere impossibile. È possibile inviare l'URL al server e scaricare il file, ma è una cattiva idea dal punto di vista della sicurezza. – Borealid
Ho trovato questo post. Dovrebbe aiutarti. http://www.irt.org/script/52.htm –