Existe-t-il un moyen de déterminer si un chemin d'image mène à une image réelle, c'est-à-dire de détecter lorsqu'une image ne se charge pas en Javascript.
Pour une application Web, j'analyse un fichier xml et je crée dynamiquement des images HTML à partir d'une liste de chemins d'images. Certains chemins d'image peuvent ne plus exister sur le serveur, je souhaite donc échouer en douceur en détectant les images qui ne parviennent pas à se charger et en supprimant cet élément HTML img.
Remarque Les solutions JQuery ne pourront pas être utilisées (le patron ne veut pas utiliser JQuery, oui je sais ne pas me lancer). Je connais un moyen dans JQuery de détecter quand une image est chargée, mais pas si elle a échoué.
Mon code pour créer des éléments img mais comment puis-je détecter si le chemin img conduit à l'échec du chargement de l'image?
var imgObj = new Image(); // document.createElement("img");
imgObj.src = src;
la source
Réponses:
Vous pouvez essayer le code suivant. Cependant, je ne peux pas garantir la compatibilité du navigateur, vous devrez donc le tester.
Et mes sympathies pour le boss résistant à jQuery!
la source
La réponse est agréable, mais elle pose un problème. Chaque fois que vous attribuez
onload
ouonerror
directement, il peut remplacer le rappel qui a été attribué précédemment. C'est pourquoi il existe une méthode intéressante qui "enregistre l'auditeur spécifié sur le EventTarget sur lequel il est appelé" comme on dit sur MDN . Vous pouvez enregistrer autant d'auditeurs que vous le souhaitez sur le même événement.Permettez-moi de réécrire un peu la réponse.
Étant donné que le processus de chargement des ressources externes est asynchrone, il serait encore plus agréable d'utiliser du JavaScript moderne avec des promesses, telles que les suivantes.
la source
Ce:
la source
<img src="your/path/that/might/fail.png" onerror="$(this).hide();"/>
la source
jQuery + CSS pour img
Avec jQuery, cela fonctionne pour moi:
Et je peux utiliser cette image partout sur mon site Web quelle que soit sa taille avec la propriété CSS3 suivante:
CSS uniquement pour background-img
Pour les images d'arrière-plan manquantes, j'ai également ajouté ce qui suit sur chaque
background-image
déclaration:Côté serveur Apache
Une autre solution consiste à détecter l'image manquante avec Apache avant de l'envoyer au navigateur et à la remplacer par le contenu par défaut no-img.png.
la source
Voici une fonction que j'ai écrite pour une autre réponse: Javascript Image Url Verify . Je ne sais pas si c'est exactement ce dont vous avez besoin, mais il utilise les différentes techniques que vous utiliseriez qui comprennent des gestionnaires pour
onload
,onerror
,onabort
et un délai d' attente général.Le chargement de l'image étant asynchrone, vous appelez cette fonction avec votre image, puis elle appelle votre rappel un peu plus tard avec le résultat.
la source
comme ci-dessous:
la source