Eh bien, un peu tard pour la fête, mais il semble qu'il y ait un peu de malentendu sur la façon dont cela autocomplete
devrait et ne devrait pas fonctionner. Selon les spécifications HTML, l'agent utilisateur (dans ce cas, Chrome) peut remplacer autocomplete
:
https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
Un agent utilisateur peut permettre à l'utilisateur de remplacer le nom du champ de remplissage automatique d'un élément, par exemple de le changer de "off" à "on" pour permettre aux valeurs d'être mémorisées et préremplies malgré les objections de l'auteur de la page, ou de toujours "off", sans jamais se souvenir valeurs. Cependant, les agents utilisateurs ne doivent pas permettre aux utilisateurs de remplacer de manière triviale le nom du champ de remplissage automatique de "off" par "on" ou d'autres valeurs, car il y a des implications de sécurité importantes pour l'utilisateur si toutes les valeurs sont toujours mémorisées, quelles que soient les préférences du site.
Donc, dans le cas de Chrome, les développeurs ont essentiellement dit "nous laisserons à l'utilisateur le soin de décider dans ses préférences s'il veut autocomplete
travailler ou non. Si vous ne le voulez pas, ne l'activez pas dans votre navigateur" .
Cependant, il semble que ce soit un peu trop zélé de leur part à mon goût, mais c'est comme ça. La spécification discute également des implications potentielles pour la sécurité d'un tel mouvement:
Le mot-clé "off" indique soit que les données d'entrée du contrôle sont particulièrement sensibles (par exemple le code d'activation d'une arme nucléaire); ou qu'il s'agit d'une valeur qui ne sera jamais réutilisée (par exemple une clé unique pour une connexion bancaire) et l'utilisateur devra donc saisir explicitement les données à chaque fois, au lieu de pouvoir compter sur l'UA pour le pré-remplissage la valeur pour lui; ou que le document fournit son propre mécanisme de saisie semi-automatique et ne souhaite pas que l'agent utilisateur fournisse des valeurs de saisie semi-automatique.
Donc, après avoir vécu la même frustration que tout le monde, j'ai trouvé une solution qui fonctionne pour moi. Il est similaire dans la veine à laautocomplete="false"
réponses.
Un article Mozilla parle exactement de ce problème:
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
Dans certains cas, le navigateur continuera de suggérer des valeurs de saisie semi-automatique même si l'attribut de saisie semi-automatique est désactivé. Ce comportement inattendu peut être assez déroutant pour les développeurs. L'astuce pour forcer vraiment le non-achèvement est d'attribuer une chaîne aléatoire à l'attribut
Le code suivant devrait donc fonctionner:
autocomplete="nope"
Et il en va de même pour chacun des éléments suivants:
autocomplete="false"
autocomplete="foo"
autocomplete="bar"
Le problème que je vois est que l'agent de navigateur pourrait être assez intelligent pour apprendre l' autocomplete
attribut et l'appliquer la prochaine fois qu'il verra le formulaire. S'il le fait, la seule façon dont je peux voir pour contourner le problème serait de changer dynamiquement leautocomplete
valeur d'attribut lorsque la page est générée.
Un point à noter est que de nombreux navigateurs ignoreront les autocomplete
paramètres des champs de connexion (nom d'utilisateur et mot de passe). Comme l'indique l'article de Mozilla:
Pour cette raison, de nombreux navigateurs modernes ne prennent pas en charge autocomplete = "off" pour les champs de connexion.
- Si un site définit autocomplete = "off" pour un formulaire et que le formulaire comprend des champs de saisie de nom d'utilisateur et de mot de passe, le navigateur proposera toujours de se souvenir de cette connexion, et si l'utilisateur accepte, le navigateur remplira automatiquement ces champs la prochaine fois que le l'utilisateur visite cette page.
- Si un site définit autocomplete = "off" pour les champs de saisie du nom d'utilisateur et du mot de passe, le navigateur proposera toujours de se souvenir de cette connexion, et si l'utilisateur accepte, le navigateur remplira automatiquement ces champs la prochaine fois que l'utilisateur visitera cette page.
C'est le comportement de Firefox (depuis la version 38), Google Chrome (depuis la 34) et Internet Explorer (depuis la version 11).
Enfin une petite information sur l'appartenance de l'attribut à l' form
élément ou à l' input
élément. La spécification a de nouveau la réponse:
Si l'attribut de saisie semi-automatique est omis, la valeur par défaut correspondant à l'état de l'attribut de saisie semi-automatique du propriétaire du formulaire de l'élément est utilisée à la place ("on" ou "off"). S'il n'y a pas de propriétaire de formulaire, la valeur "on" est utilisée.
Donc. Le mettre sur le formulaire devrait s'appliquer à tous les champs de saisie. Le mettre sur un élément individuel devrait s'appliquer à cet élément uniquement (même s'il n'y en a pas sur le formulaire). S'il autocomplete
n'est pas défini du tout, il est par défaut on
.
Sommaire
Pour désactiver autocomplete
sur l'ensemble du formulaire:
<form autocomplete="off" ...>
Ou si vous avez besoin de le faire dynamiquement:
<form autocomplete="random-string" ...>
Pour désactiver autocomplete
sur un élément individuel (quel que soit le paramètre de formulaire présent ou non)
<input autocomplete="off" ...>
Ou si vous avez besoin de le faire dynamiquement:
<input autocomplete="random-string" ...>
Et rappelez-vous que certains agents utilisateurs peuvent remplacer même vos tentatives de désactivation les plus difficiles autocomplete
.