618 votes

Désactiver le remplissage automatique de Chrome

J'ai rencontré des problèmes avec le comportement de remplissage automatique de chrome sur plusieurs formulaires.

Les champs du formulaire ont tous des noms très courants et précis, tels que "email", "nom" ou "mot de passe", et ils ont également autocomplete="off" set.

L'indicateur de complétion automatique a permis de désactiver le comportement de la complétion automatique, où une liste déroulante de valeurs apparaît lorsque vous commencez à taper, mais n'a pas modifié les valeurs que Chrome remplit automatiquement dans les champs.

Ce comportement serait correct si chrome ne remplissait pas les entrées de manière incorrecte, par exemple en remplissant l'entrée téléphone par une adresse e-mail. Des clients se sont plaints de ce problème, il est donc avéré qu'il se produit dans de nombreux cas, et non pas comme une sorte de résultat de quelque chose que j'ai fait localement sur ma machine.

La seule solution actuelle à laquelle je pense est de générer dynamiquement des noms d'entrées personnalisées, puis d'extraire les valeurs en arrière-plan, mais cela semble être un moyen assez compliqué de contourner ce problème. Existe-t-il des balises ou des bizarreries qui modifient le comportement du remplissage automatique et qui pourraient être utilisées pour résoudre ce problème ?

1 votes

Veuillez compléter (et clarifier) la phrase "Chrome remplit automatiquement les champs comme". Qu'entendez-vous par "auto-populate", qui semble vouloir dire autre chose que "autocomplete" ? Veuillez également fournir une démo autonome et/ou l'URL d'une démo. Il semble que le problème soit causé par du code JavaScript sur la page ou par un module complémentaire de Chrome.

3 votes

@JukkaK.Korpela L'autocomplétion ressemble à ceci este où il suggère des valeurs au fur et à mesure que vous tapez. L'auto-remplissage ressemble à este où, lorsque la page se charge, le chrome détecte les entrées et devine les valeurs avec lesquelles les remplir, tout en colorant les fonds en jaune. Dans mon cas, il ne devine pas correctement.

1 votes

848voto

mike nelson Points 3819

Je viens de découvrir que si vous vous souvenez d'un nom d'utilisateur et d'un mot de passe pour un site, la version actuelle de Chrome remplit automatiquement votre nom d'utilisateur et votre adresse électronique dans le champ le champ avant tout type=password champ. Il ne se soucie pas du nom du champ - il suppose simplement que le champ précédant le mot de passe sera votre nom d'utilisateur.

Ancienne solution

Il suffit d'utiliser <form autocomplete="off"> et il empêche le pré-remplissage du mot de passe ainsi que tout type de remplissage heuristique des champs basé sur des suppositions que le navigateur peut faire (qui sont souvent fausses). Contrairement à l'utilisation de <input autocomplete="off"> qui semble être pratiquement ignoré par le remplissage automatique du mot de passe (dans Chrome en tout cas, Firefox l'ignore).

Solution actualisée

Chrome ignore désormais <form autocomplete="off"> . Par conséquent, ma solution de rechange originale (que j'avais supprimée) fait maintenant fureur.

Il suffit de créer quelques champs et de les rendre cachés 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" />

Ensuite, mettez vos vrais champs en dessous.

N'oubliez pas d'ajouter le commentaire, sinon les autres membres de votre équipe se demanderont ce que vous faites !

Mise à jour mars 2016

Je viens de tester avec la dernière version de Chrome - tout va bien. Il s'agit d'une réponse assez ancienne, mais je tiens à préciser que notre équipe l'utilise depuis des années sur des dizaines de projets. Il fonctionne toujours très bien malgré les quelques commentaires ci-dessous. Il n'y a pas de problème d'accessibilité car les champs sont display:none ce qui signifie qu'ils ne sont pas mis au point. Comme je l'ai mentionné, vous devez les mettre avant vos champs réels.

Si vous utilisez le javascript pour modifier votre formulaire, il y a une astuce supplémentaire dont vous aurez besoin. Affichez les faux champs pendant que vous manipulez le formulaire, puis cachez-les à nouveau une milliseconde plus tard.

Exemple de code utilisant jQuery (en supposant que vous donniez une classe à vos faux champs) :

$(".fake-autofill-fields").show();
// some DOM manipulation/ajax here
window.setTimeout(function () {
  $(".fake-autofill-fields").hide();
}, 1);

Mise à jour de juillet 2018

Ma solution ne fonctionne plus aussi bien depuis que les experts en anti-utilisation 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 en grande partie le problème.

Cependant, cela ne fonctionne pas lorsque vous n'avez pas de champ pour le mot de passe mais seulement une adresse électronique. Dans ce cas également, il peut être difficile de faire en sorte que le système cesse de se comporter en jaune et de préremplir le champ. La solution des faux champs peut être utilisée pour résoudre ce problème.

En fait, il est parfois nécessaire de déposer deux lots de faux champs, et de les essayer à des endroits différents. Par exemple, j'avais déjà des champs factices au début de mon formulaire, mais Chrome a récemment recommencé à pré-remplir le champ "Email". J'ai donc ajouté d'autres champs factices juste avant le champ "Email", ce qui a réglé le problème. En supprimant le premier ou le deuxième lot de champs, on revient à un remplissage automatique incorrect et trop zélé.

Mise à jour en mars 2020

Il n'est pas clair si et quand cette solution fonctionne encore. Il semble qu'elle fonctionne encore parfois, mais pas tout le temps.

Dans les commentaires ci-dessous, vous trouverez quelques indices. L'un d'entre eux, ajouté par @anilyeni, mérite peut-être d'être approfondi :

Comme je l'ai remarqué, autocomplete="off" fonctionne sous Chrome 80, s'il y a moins de trois éléments dans le fichier <form> . Je ne sais pas quelle est la logique ni où se trouve la documentation à ce sujet.

Ce message de @dubrox peut également être pertinent, bien que je ne l'aie pas testé :

Merci beaucoup pour l'astuce, mais veuillez mettre à jour la réponse, car display:none; ne fonctionne plus, mais position: fixed;top:-100px;left:-100px; width:5px; fait :)

Mise à jour AVRIL 2020

Valeur spéciale pour le chrome pour cet attribut fait le travail : (testé sur l'entrée - mais pas par moi) autocomplete="chrome-off"

0 votes

Pour la solution de contournement : cela ne rendrait-il pas le champ du mot de passe autorempli malgré tout ? Et merci pour la solution de modification. Je ne laisserais que cela comme réponse.

0 votes

Bon point, j'ai supprimé cette solution de contournement et j'ai maintenant la solution.

0 votes

Merci de partager cette information. J'avais ce même comportement bizarre et je ne comprenais pas pourquoi il se produisait jusqu'à ce que vous le précisiez. Dans mon cas, cela ne se produisait que lorsque j'activais l'autocomplétion. C'est pourquoi je ne rencontrais pas ce problème avant.

66voto

Jobin Jose Points 4433

Essaie ça. Je sais que la question est un peu ancienne, mais c'est une approche différente du problème.

J'ai également remarqué que le problème se situe juste au-dessus de la password champ.

J'ai essayé les deux méthodes comme

<form autocomplete="off"> y <input autocomplete="off"> mais aucun d'entre eux n'a fonctionné pour moi.

J'ai donc corrigé le problème en utilisant le snippet ci-dessous - j'ai simplement ajouté un autre champ de texte juste au-dessus du champ du type de mot de passe et je l'ai créé comme suit display:none .

Quelque chose comme ça :

<input type="text" name="prevent_autofill" id="prevent_autofill" value="" style="display:none;" />
<input type="password" name="password_fake" id="password_fake" value="" style="display:none;" />
<input type="password" name="password" id="password" value="" />

J'espère que cela aidera quelqu'un.

0 votes

Cela ne fonctionne pas bien pour moi : chrome continue à remplir automatiquement le champ du mot de passe de manière visible, alors que le nom d'utilisateur est effectivement caché.

0 votes

Oui ce n'est pas pour le mot de passe c'est pour le nom d'utilisateur si vous avez besoin du mot de passe aussi essayez de créer un champ faux mot de passe aussi.vérifiez mon edit

1 votes

Celui-ci a fonctionné pour moi (pour l'instant). J'ai constaté que j'ai utilisé environ une demi-douzaine d'astuces différentes au fil du temps, et au bout d'un moment, Chrome décide qu'il veut vaincre cette astuce. Il faut donc en créer un nouveau, comme celui-ci. Dans mon application, j'ai un formulaire de mise à jour de profil avec des champs d'adresse électronique et de mot de passe qui doivent être laissés vides, sauf si l'utilisateur souhaite apporter des modifications. Mais lorsque Chrome remplit automatiquement le formulaire, il place l'identifiant de l'utilisateur dans le champ "confirmation de l'e-mail", ce qui entraîne toutes sortes de conditions d'erreur, qui mènent à d'autres conditions d'erreur, alors que l'utilisateur hésite à faire ce qu'il faut.

9voto

vikingben Points 422

J'ajoute cette partie pour un point de vue différent. Pourquoi ne pas utiliser un pot de miel pour empêcher Chrome de botter vos champs ? Cela semble fonctionner sur plusieurs navigateurs pour moi. Ça vaut le coup d'essayer.

http://benjaminjshore.info/2014/05/chrome-auto-fill-honey-pot-hack.html

6voto

Priyanka Points 11

Essayez ce qui suit jQuery qui a fonctionné pour moi.

if ($.browser.webkit) {
    $('input[name="password"]').attr('autocomplete', 'off');
    $('input[name="email"]').attr('autocomplete', 'off');
}

0 votes

Des solutions impressionnantes

0 votes

Vous pouvez simplement ajouter autocomplete="off" au champ de saisie au lieu d'utiliser jquery. Et d'ailleurs, cela ne fonctionne pas. Les suggestions de mot de passe de Chrome s'affichent toujours.

3voto

user3638028 Points 11

La seule façon qui fonctionne pour moi est :(jQuery requis)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X