Mise à jour : Cette solution de contournement ne fonctionne plus pour :
Après plusieurs jours de contestation de ce problème, je peux confirmer que cela ne peut pas être fait en utilisant la fonction <img>
et toutes les techniques actuellement disponibles.
La bonne solution consiste à utiliser un serveur proxy sans cookie pour les images, comme le fait Google, mais cela demande trop de ressources pour nous pour le moment.
Solution de contournement acceptable :
- Pour désactiver le remplacement des cookies
<img>
avec <iframe
sandbox
>
;
- Pour afficher l'image à l'intérieur
<iframe>
utiliser URI des données avec des CSS en ligne ;
- Pour émuler
<img>
comportement de dimensionnement des balises, utilisation de CSS background-size: cover
qui met l'image à l'échelle, ce qui permet de définir la largeur et la hauteur de l'image à l'aide de la fonction <iframe>
qui s'applique à l'image intérieure ;
- Utilisez ARIA pour spécifier
role="img"
et aria-label
comme alt
remplacement.
Exemple :
<img width="100" height="75" alt="About company"
src="https://www.dtm.io/wp-content/uploads/2018/04/datamart-company.png" />
<iframe width="100" height="75" aria-label="About company" role="img"
frameborder="0" sandbox
src="data:text/html,<style>body{background:url('https://www.dtm.io/wp-content/uploads/2018/04/datamart-company.png') center/cover no-repeat;padding:0;margin:0;overflow:hidden}</style>"></iframe>
1 votes
@JeremyBanks, merci pour vos commentaires. Mon idée principale est d'afficher des images provenant de domaines tiers, mais de ne pas leur permettre de définir/envoyer des cookies. Traitez cela comme une application Twitter personnalisée.
2 votes
Je l'ai. FYI cette question a été liée à une méta-discussion sur la façon dont Stack Overflow lui-même pourrait empêcher l'envoi de cookies et de référents à Facebook lors du chargement d'avatars Facebook sur le site.
1 votes
Ce qui est frustrant, c'est qu'il ne semble pas y avoir de moyen simple, conforme aux spécifications, et uniquement frontal, de faire cela. Jeremy Banks note que la réponse acceptée n'est pas garantie de fonctionner par la spécification. Utilisation de
crossorigin="anonymous"
sur l'image est à proscrire parce qu'il fixe le nom de la requête mode à "cors", ce qui fait que la requête renvoie une erreur de réseau, à moins qu'une méthode appropriée ne soit utilisée.access-control-allow-origin
est émis par le serveur tiers. Utilisation defetch
aveccredentials: 'omit', mode: 'no-cors'
laisse la demande aboutir mais renvoie une réponse "opaque".2 votes
La meilleure idée que j'ai eue, que quelqu'un pourrait essayer dans les 23 prochaines heures s'il veut profiter de la prime de Jeremy, est d'utiliser
fetch
suivi de la mise en cache de la réponse opaque dansCacheStorage
et ensuite servir cette réponse opaque comme une imagesrc
en utilisant un travailleur de service ? Je n'ai pas le temps d'apprendre à utiliser les outils nécessaires à cette fin.1 votes
Et si on utilisait cloudimage.io/en/home ? Ils prennent une URL et la taille d'une image et la mettent automatiquement à l'échelle pour vous. Donc les cookies ne seront pas un problème car ils accèdent à l'URL ? @JeremyBanks