Je viens de découvrir que si vous avez un nom d'utilisateur et un mot de passe mémorisés pour un site, la version actuelle de Chrome remplira automatiquement votre nom d'utilisateur / adresse e-mail dans le champ avant tout type=password
champ. Peu importe comment le champ est appelé - il suppose simplement que le champ avant que le mot de passe devienne votre nom d'utilisateur.
Ancienne solution
Il suffit de l'utiliser <form autocomplete="off">
et cela empêche le pré-remplissage du mot de passe ainsi que tout type de remplissage heuristique des champs basé sur les hypothèses qu'un navigateur peut faire (qui sont souvent erronées). Contrairement à l'utilisation <input autocomplete="off">
qui semble être à peu près ignorée par la saisie automatique du mot de passe (dans Chrome, c'est-à-dire que Firefox y obéit).
Solution mise à jour
Chrome ignore maintenant <form autocomplete="off">
. Par conséquent, ma solution de contournement d'origine (que j'avais supprimée) fait maintenant fureur.
Créez simplement quelques champs et masquez-les avec "display: none". Exemple:
<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>
Mettez ensuite vos vrais champs en dessous.
N'oubliez pas d'ajouter le commentaire ou d'autres personnes de votre équipe se demanderont ce que vous faites!
Mise à jour mars 2016
Je viens de tester avec le dernier Chrome - tout va bien. C'est une réponse assez ancienne maintenant, mais je tiens à mentionner que notre équipe l'utilise depuis des années sur des dizaines de projets. Cela fonctionne toujours très bien malgré quelques commentaires ci-dessous. L'accessibilité ne pose aucun problème car les champs display:none
signifient qu'ils ne sont pas ciblés. Comme je l'ai mentionné, vous devez les mettre avant vos vrais domaines.
Si vous utilisez javascript pour modifier votre formulaire, vous aurez besoin d'une astuce supplémentaire. Affichez les faux champs pendant que vous manipulez le formulaire, puis masquez-les à nouveau une milliseconde plus tard.
Exemple de code utilisant jQuery (en supposant que vous donnez une classe à vos faux champs):
$(".fake-autofill-fields").show();
// some DOM manipulation/ajax here
window.setTimeout(function () {
$(".fake-autofill-fields").hide();
},1);
Mise à jour juillet 2018
Ma solution ne fonctionne plus si bien depuis que les experts anti-utilisabilité de Chrome ont travaillé dur. Mais ils nous ont jeté un os sous la forme de:
<input type="password" name="whatever" autocomplete="new-password" />
Cela fonctionne et résout principalement le problème.
Cependant, cela ne fonctionne pas lorsque vous n'avez pas de champ de mot de passe mais uniquement une adresse e-mail. Il peut également être difficile de faire en sorte qu'il cesse de jaunir et de préremplir. La solution des faux champs peut être utilisée pour résoudre ce problème.
En fait, vous devez parfois déposer deux lots de faux champs et les essayer à différents endroits. Par exemple, j'avais déjà de faux champs au début de mon formulaire, mais Chrome a récemment recommencé à préremplir mon champ "E-mail" - alors j'ai doublé et ajouté plus de faux champs juste avant le champ "E-mail", et cela l'a corrigé . La suppression du premier ou du deuxième lot des champs revient à une saisie automatique trop zélée.
Mise à jour mars 2020
Il n'est pas clair si et quand cette solution fonctionne toujours. Il semble toujours fonctionner parfois mais pas tout le temps.
Dans les commentaires ci-dessous, vous trouverez quelques conseils. Celui qui vient d'être ajouté par @anilyeni mérite peut-être une enquête plus approfondie:
Comme je l'ai remarqué, autocomplete="off"
fonctionne sur Chrome 80, SI il y a moins de 3 éléments <form>
. Je ne sais pas quelle est la logique ou où la documentation connexe à ce sujet.
Aussi celui de @dubrox peut être pertinent, bien que je ne l'ai pas testé:
merci beaucoup pour l'astuce, mais veuillez mettre à jour la réponse, car display:none;
cela ne fonctionne plus, mais le position: fixed;top:-100px;left:-100px; width:5px;
fait :)
Mise à jour AVRIL 2020
La valeur spéciale pour le chrome pour cet attribut fait le travail: (testé en entrée - mais pas par moi)
autocomplete="chrome-off"