Détecter quand une image ne se charge pas en Javascript
Est-il un moyen pour déterminer si un chemin de l'image conduit à une image réelle, c'est à dire, de détecter lorsqu'une image ne se charge pas en Javascript.
Pour une application web, je suis de l'analyse d'un fichier xml et de la création dynamique d'images de la page HTML à partir d'une liste de chemins d'image. Certains chemins d'image n'existe plus sur le serveur j'ai donc voulu manquer gracieusement par la détection des images ne se chargent pas et la suppression HTML élément img.
Note JQuery solutions ne sera pas en mesure d'être utilisé(le patron ne veut pas utiliser JQuery, oui je sais ne pas me faire). Je sais d'une façon JQuery pour détecter le moment où une image est chargée, mais pas s'il a échoué.
Mon code pour créer les éléments img, mais comment puis-je détecter si l'img chemin mène à un échec de chargement de l'image?
var imgObj = new Image(); //document.createElement("img");
imgObj.src = src;
- Cela peut vous aider: stackoverflow.com/questions/1977871/... (c'est jQuery, mais il peut vous conduire sur le droit chemin)
- essayez l'un de ces google.com/...
- Drôle @ajax333221 cette question est en premier dans les résultats de votre lien 🙂
- écrire un sélecteur JQuery pour trouver un nouveau Patron... l'internet est une grande place.
- needsmorejquery.com
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer le code suivant. Je ne peux pas garantir la compatibilité du navigateur, donc vous aurez à tester.
Et mes sympathies pour le jQuery-résistant patron!
La réponse est agréable, mais il présente un problème. Chaque fois que vous affectez
onload
ouonerror
directement, il peut remplacer la fonction de rappel qui vous a été attribué précédemment. C'est pourquoi il y a une belle méthode qui "les registres de l'écouteur spécifié sur la EventTarget il est appelé" comme ils disent sur MDN. Vous pouvez enregistrer autant d'auditeurs que vous le souhaitez sur le même événement.Permettez-moi de réécrire la réponse un peu.
Parce que la ressource externe processus de chargement est asynchrone, il serait encore plus sympa à utiliser les technologies modernes de JavaScript avec des promesses, telles que les suivantes.
this
contexte d'une fonction, il n'est pas à court de notation. Je n'appellerais pas ça un standard. Et merci pour le remarquer, je suis d'ajouter un nom à la fonction anonyme. Et ce que je faisait remarquer avec ma déclaration étaient lesfulfilled
etrejected
fonctions dans.then()
parce que ce sont généralement remplacés par des flèches fonctions, ce qui conduit à la confusion des erreurs.Ce:
<img src="your/path/that/might/fail.png" onerror="$(this).hide();"/>
Voici une fonction que j'ai écrit pour une autre réponse: Javascript Url De L'Image De Vérifier. Je ne sais pas si c'est exactement ce dont vous avez besoin, mais il utilise diverses techniques que vous pouvez utiliser qui comprennent des gestionnaires pour
onload
,onerror
,onabort
et un délai d'attente.Parce que l'image de chargement est asynchrone, vous devez appeler cette fonction avec votre image et ensuite, il appelle votre rappel quelque temps plus tard, avec le résultat.
jQuery + CSS pour img
Avec jQuery c'est de travailler pour moi :
Et je peux utiliser cette image partout sur mon site web, quelle que soit la taille de celui-ci à la suite de propriété CSS3 :
CSS uniquement pour l'arrière-plan-img
Pour le manque d'images de fond, j'ai également ajouté les opérations suivantes sur chaque
background-image
déclaration :Serveur Apache côté
Une autre solution consiste à détecter des manque image avec Apache avant d'envoyer au navigateur et remplace par la valeur par défaut no-img.png contenu.
comme ci-dessous: