CSS:
.posting-logo-div { }
.posting-logo-img { height:120px; width:120px; }
.posting-photo-div { height:5px;width:5px;position:relative;top:-140px;left:648px; }
.posting-photo-img { height:240px; width:240px; }
HTML:
<div id="image" class="posting-logo-div"><img src="../images/some-logo1.jpg" onerror="this.src='../images/no-logo-120.jpg';" class="posting-logo-img"></div>
<div id="photo" class="posting-photo-div"><img src="../images/some-logo2.jpg" onerror="this.src='../images/no-logo-240.jpg';" class="posting-photo-img"></div>
Cela ne semble pas fonctionner dans Chrome ou Mozilla mais fonctionne dans IE.
Cela marche:
<img src="invalid_link"
onerror="this.onerror=null;this.src='https://placeimg.com/200/300/animals';"
>
Démo en direct: http://jsfiddle.net/oLqfxjoz/
Comme Nikola l'a souligné dans le commentaire ci-dessous, si l'URL de sauvegarde est également invalide, certains navigateurs déclencheront à nouveau l'événement "error", ce qui entraînera une boucle infinie. Nous pouvons nous prémunir contre cela en annulant simplement le gestionnaire "d'erreur" via this.onerror=null;
.
C'est en fait difficile, surtout si vous prévoyez de renvoyer une URL d'image pour les cas d'utilisation où vous devez concaténer des chaînes avec l'URL d'image de condition onerror
, par exemple vous pouvez définir le paramètre url
par programmation dans CSS.
L'astuce est que le chargement de l'image est asynchrone par nature, donc le onerror
ne se produit pas de façon sunchronique, c'est-à-dire que si vous appelez returnPhotoURL
il retourne immédiatement undefined
bcs la méthode asynchrone de chargement/la prise en charge de la charge d'image vient de commencer.
Donc, vous devez vraiment envelopper votre script dans une promesse, puis l'appeler comme ci-dessous. REMARQUE: mon exemple de script fait d'autres choses mais montre le concept général:
returnPhotoURL().then(function(value){
doc.getElementById("account-section-image").style.backgroundImage = "url('" + value + "')";
});
function returnPhotoURL(){
return new Promise(function(resolve, reject){
var img = new Image();
//if the user does not have a photoURL let's try and get one from gravatar
if (!firebase.auth().currentUser.photoURL) {
//first we have to see if user han an email
if(firebase.auth().currentUser.email){
//set sign-in-button background image to gravatar url
img.addEventListener('load', function() {
resolve (getGravatar(firebase.auth().currentUser.email, 48));
}, false);
img.addEventListener('error', function() {
resolve ('//rack.pub/media/fallbackImage.png');
}, false);
img.src = getGravatar(firebase.auth().currentUser.email, 48);
} else {
resolve ('//rack.pub/media/fallbackImage.png');
}
} else {
img.addEventListener('load', function() {
resolve (firebase.auth().currentUser.photoURL);
}, false);
img.addEventListener('error', function() {
resolve ('https://rack.pub/media/fallbackImage.png');
}, false);
img.src = firebase.auth().currentUser.photoURL;
}
});
}
très simple
<img onload="loaded(this, 'success')" onerror="error(this,
'error')" src="someurl" alt="" />
function loaded(_this, status){
console.log(_this, status)
// do your work in load
}
function error(_this, status){
console.log(_this, status)
// do your work in error
}