Pourquoi Chrome n'appelle-t-il que l'événement Onerror pour l'élément IMG une fois lorsque tous les autres navigateurs (IE7,8,9, FF, Opera et Safari) l'appelent à plusieurs reprises?
Y a-t-il un moyen de forcer Pour répéter l'appel ONERRRE (en chrome)? p>
Jsfiddle p> < p> html: strong> em> p> javascript: strong> em> em> < / p> edit: strong>
Commentaire de @sunil D. À propos de Chrome Not de nouvelle recherche en raison de nom de domaine non valide de EDIT: STRUT>
Utilisation mise à jour du violon et de la suppression de jQuery à des choses simplement et de régler cela. P> p> www.asdfjklasdfasdf.com code> dans le Initial Fiddle exemple, je suis allé de l'avant et j'ai changé le nom de domaine pour correspondre à celui de l'image de réussite, mais avec un nom de fichier différent, il est donc toujours un 404. Cela prouvera que ce n'est pas le domaine non valide. Nom provoquant que Chrome renfloue la 2e tentative. P>
5 Réponses :
C'est le comportement correct. Vous ne voulez pas télécharger la même image deux fois - c'est un gaspillage de bande passante. P>
Quel chrome crée-t-il un objet en mémoire, puis l'appliquera à toutes les images avec le Si vous en avez besoin, créez-la deux fois, créez ces objets via JavaScript et assignez src code respectif>. p>
.Onload = fonction () {..} code> à chacun. P>
ça ne télécharge rien deux fois. Dans le violon, lorsque l'image initiale dans l'attribut src code> n'est pas trouvée, il incendie l'événement
Onerrrrrr code> qui modifie l'attribut
src code> SRC code> à une nouvelle URL. Lorsque la nouvelle URL est réévaluée et déterminée à être un 404 à nouveau, il convient à nouveau d'appeler l'événement
Onerror code> jusqu'à ce que vous ne l'iez pas avec
onerror = '' code>. Tout comme tous les autres navigateurs font. Essayez le violon en chrome et aussi dans un autre navigateur.
Je pense que @mikhail est sur la bonne voie, à l'exception de la raison légèrement différente. Dans le deuxième exemple, vous essayez de télécharger 2 images du même domaine inexistant Lorsque vous essayez de télécharger Lorsque vous essayez de télécharger Pour prouver cela, ajoutez simplement 1 caractère à le nom de domaine pour edit strud> p> Une façon dont vous pouvez le forcer Pour tenter que les téléchargements suivants consistent à modifier le de cette façon, lorsque l'erreur se produit, vous définissez la source sur ''. Cela semble générer une erreur aussi, ce qui le déclenche ensuite pour essayer la prochaine source ... p> p> www.asdfjklasdfasdf.com code>.
bogus1.png code> chrome omet de résoudre le domaine à une adresse IP. P>
bogus2.png code> (à partir du même domaine inexistant), Chrome ne fait rien du tout. .. Parce qu'il sait que la recherche de domaine a échoué. Que ce soit un comportement correct pour Chrome de ne pas expédier un autre événement code> Onerror code> pourrait être ouvert au débat :) Je pense en quelque sorte qu'il devrait. P>
bogus2.png code> et cela fonctionnera comme prévu. p>
src code> du
code> à la chaîne vide. C'est une sorte de hacky, mais ça marche. Vous pouvez définir votre attribut
rsrc code> à quelque chose comme ceci: p>
BLARG! Je pense que mon édition était erronée. Votre exemple original fonctionne pour moi maintenant, quand il n'a pas été plus tôt.
Vous êtes sur quelque chose en suggérant de définir l'attribut src code> à une chaîne vide entre les appels d'Onerror. Il semble travailler en chrome de cette façon et continuer à l'appeler à plusieurs reprises, mais pas sûre pourquoi.
Point intéressant sur le domaine, mais ce n'est pas la raison pour laquelle il est dédaignant. J'ai changé le violon ci-dessus pour utiliser le même nom de domaine avec un nom de fichier faux et le problème existe toujours.
ok l'a eu. À l'intérieur de la fonction Vous attribuez à l'événement ONERRRE, src code> sur
null code> avant de le changer de nouvelle valeur forte>.
img.setAttribute('src', null);
Vous pouvez s'il vous plaît Quelques b> des navigateurs Tous b> du temps, vous pouvez s'il vous plaît Tous b> des navigateurs Certains b> de la temps, mais vous ne pouvez pas s'il vous plaît tous b> des navigateurs tous b> du temps.
La réponse de Jess travaille dans tous les navigateurs de manière fiable (bien que son jsfiddle soit cassé), et ce n'est même pas un piratage - vous devez l'accepter au lieu de celui-ci, comme vous fait des demandes supplémentaires ...
J'ai essayé les moyens énoncés ci-dessus, Setattribute ("SRC", NULL) a un effet secondaire, c'est-à-dire ajouter une autre demande.
Enfin, j'utilise p>
setTimeout(function(){ imgElement.src = 'http://xxxx'; }, 0)
Il suffit de faire courir Jsfiddle à Nowrap au lieu de décharger
Aussi répondu par ETDashou sur cette question: https://stackoverflow.com/a/9891041/1090274 , réglage this.onerror = null; code> a travaillé pour moi. p>