J'ai créé une application Web qui utilise une liste déroulante de balises. Cela fonctionne très bien dans tous les navigateurs, à l'exception du navigateur Chrome (version 21.0.1180.89).
Malgré les input
champs ET le form
champ ayant l' autocomplete="off"
attribut, Chrome insiste pour afficher un historique déroulant des entrées précédentes pour le champ, ce qui efface la liste des balises.
html
google-chrome
autocomplete
forms
Mr Fett
la source
la source
Réponses:
MISE À JOUR
Il semble maintenant que Chrome ignore les attributs
style="display: none;"
orstyle="visibility: hidden;
.Vous pouvez le changer en quelque chose comme:
D'après mon expérience, Chrome ne complète automatiquement que la première
<input type="password">
et la précédente<input>
. J'ai donc ajouté:Au sommet de
<form>
l'affaire et l'affaire a été résolue.la source
display: none;
disparaîtra l'élément, rien sur la saisie semi-automatique.Empêcher la saisie semi-automatique du nom d'utilisateur (ou e-mail) et du mot de passe:
Empêcher la saisie semi-automatique d'un champ ( peut ne pas fonctionner ):
Explication:
autocomplete
fonctionne toujours sur un<input>
malgré avoirautocomplete="off"
, mais vous pouvez changeroff
pour une chaîne aléatoire, commenope
.Autres "solutions" pour désactiver la saisie semi-automatique d'un champ (ce n'est pas la bonne façon de le faire, mais ça marche):
1.
HTML:
JS (onload):
ou en utilisant jQuery:
2.
HTML:
JS (onload):
ou en utilisant jQuery:
Pour ajouter plusieurs champs à l'aide de jQuery:
Travaille dans:
Chrome: 49+
Firefox: 44+
la source
new-password
est une bonne prise pour toute entrée cachée qui n'est en fait pas un mot de passe, merciautocomplete="nope"
réellement fonctionné pour moi, sauf si je l'ajoute à mes deux champs de formulaire. Comme je peux l'avoir sur l'un ou l'autre champ, puis ce champ ne sera pas rempli automatiquement, mais l'autre champ sera toujours rempli automatiquement, mais dès que je le mettrai sur les deux champs, les deux recommenceront la saisie automatique.Il semble que Chrome ignore maintenant,
autocomplete="off"
sauf s'il se trouve sur la<form autocomplete="off">
balise.la source
Approche moderne
Faites simplement votre entrée
readonly
, et sur le focus, supprimez-la. Il s'agit d'une approche très simple et les navigateurs ne rempliront pas lesreadonly
entrées. Par conséquent, cette méthode est acceptée et ne sera jamais remplacée par les futures mises à jour du navigateur.La partie suivante est facultative. Donnez un style à votre entrée en conséquence afin qu'elle ne ressemble pas à une
readonly
entrée.EXEMPLE DE TRAVAIL
la source
modern approach
. Moins de 1% des utilisateurs dans le monde ont désactivé Javascript. Donc, honnêtement, cela ne vaut la peine de temps pour personne pour un public aussi restreint quand une grande majorité de sites Web s'appuient sur Javascript. Je développe des sites Web depuis très longtemps maintenant, et 100% de mes sites utilisent Javascript et en dépendent fortement. Si les utilisateurs ont désactivé Javascript, c'est leur propre problème et choix, pas le mien. Ils ne seront pas en mesure de visiter ou d'utiliser au moins 90% des sites Web en ligne sans que cela soit désactivé ... Votre vote négatif est complètement hors de propos.Pour une solution de contournement fiable, vous pouvez ajouter ce code à votre page de mise en page:
Chrome respecte la saisie semi-automatique = désactivée uniquement lorsqu'il existe au moins un autre élément d'entrée dans le formulaire avec une autre valeur de saisie semi-automatique.
Cela ne fonctionnera pas avec les champs de mot de passe - ceux-ci sont traités très différemment dans Chrome. Voir https://code.google.com/p/chromium/issues/detail?id=468153 pour plus de détails.
MISE À JOUR: Bug corrigé comme "ne sera pas corrigé" par l'équipe Chromium le 11 mars 2016. Voir le dernier commentaire dans mon rapport de bug initialement déposé , pour une explication complète. TL; DR: utilisez des attributs sémantiques de saisie semi-automatique tels que autocomplete = "new-street-address" pour éviter que Chrome ne remplisse automatiquement.
la source
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 remplacerautocomplete
:https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
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:
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 à la
autocomplete="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
Le code suivant devrait donc fonctionner:
Et il en va de même pour chacun des éléments suivants:
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: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: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éfauton
.Sommaire
Pour désactiver
autocomplete
sur l'ensemble du formulaire:Ou si vous avez besoin de le faire dynamiquement:
Pour désactiver
autocomplete
sur un élément individuel (quel que soit le paramètre de formulaire présent ou non)Ou si vous avez besoin de le faire dynamiquement:
Et rappelez-vous que certains agents utilisateurs peuvent remplacer même vos tentatives de désactivation les plus difficiles
autocomplete
.la source
La solution à l'heure actuelle est d'utiliser
type="search"
. Google n'applique pas le remplissage automatique aux entrées avec un type de recherche.Voir: https://twitter.com/Paul_Kinlan/status/596613148985171968
Mise à jour 04/04/2016: On dirait que c'est corrigé! Voir http://codereview.chromium.org/1473733008
la source
La version 34 de Chrome ignore maintenant le
autocomplete=off
, voyez ceci .Beaucoup de discussions pour savoir si c'est une bonne ou une mauvaise chose? Quel est votre point de vue?
la source
Le navigateur ne se soucie pas de la saisie semi-automatique = désactivée ou remplit même les informations d'identification dans un mauvais champ de texte?
Je l'ai corrigé en définissant le champ de mot de passe en lecture seule et en l'activant, lorsque l'utilisateur clique dessus ou utilise la touche de tabulation de ce champ.
correction du remplissage automatique du navigateur: lecture seule et mise en écriture sur le focus (au clic de la souris et tabulation dans les champs)
Mise à jour: Mobile Safari place le curseur dans le champ, mais n'affiche pas le clavier virtuel. Le nouveau correctif fonctionne comme avant mais gère le clavier virtuel:
Démo en direct https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
Au fait, plus d'informations sur mon observation:
Parfois, je remarque ce comportement étrange sur Chrome et Safari, quand il y a des champs de mot de passe sous la même forme. Je suppose que le navigateur recherche un champ de mot de passe pour insérer vos informations d'identification enregistrées. Ensuite, il remplit automatiquement le nom d'utilisateur dans le champ de saisie de texte le plus proche, qui apparaît avant le champ de mot de passe dans DOM (deviner simplement en raison de l'observation). Comme le navigateur est la dernière instance et que vous ne pouvez pas le contrôler, parfois même la saisie semi-automatique = off n'empêcherait pas de remplir les informations d'identification dans des champs incorrects, mais pas le champ utilisateur ou surnom.
la source
Vous pouvez utiliser
autocomplete="new-password"
Travaille dans:
la source
TL; DR: dites à Chrome qu'il s'agit d'une nouvelle entrée de mot de passe et qu'elle ne fournira pas d'anciennes suggestions de saisie semi-automatique:
autocomplete="off"
ne fonctionne pas en raison d'une décision de conception - de nombreuses recherches montrent que les utilisateurs ont beaucoup plus de temps et plus à pirater les mots de passe s'ils peuvent les stocker dans un navigateur ou un gestionnaire de mots de passe.La spécification de
autocomplete
a changé et prend désormais en charge diverses valeurs pour faciliter la saisie automatique des formulaires de connexion:Si vous ne fournissez pas ces Chrome essaie toujours de deviner, et quand il le fait, il ignore
autocomplete="off"
.La solution est que des
autocomplete
valeurs existent également pour les formulaires de réinitialisation de mot de passe:Vous pouvez utiliser ce
autocomplete="new-password"
drapeau pour dire à Chrome de ne pas deviner le mot de passe, même s'il en a un stocké pour ce site.Chrome peut également gérer les mots de passe des sites directement à l'aide de l' API d'informations d'identification , qui est une norme et aura probablement un support universel à terme.
la source
J'ai résolu le combat sans fin avec Google Chrome avec l'utilisation de caractères aléatoires. Lorsque vous effectuez toujours un rendu de saisie semi-automatique avec une chaîne aléatoire, il ne se souviendra de rien.
J'espère que cela aidera d'autres personnes.
la source
Autocomplete="Off"
ne fonctionne plus.Essayez d'utiliser uniquement une chaîne aléatoire au lieu de
"Off"
, par exempleAutocomplete="NoAutocomplete"
J'espère que ça aide.
la source
Vu chrome ignorer le
autocomplete="off"
, je le résous d'une manière stupide qui utilise la "fausse entrée" pour tromper le chrome pour le remplir au lieu de remplir le "vrai".Exemple:
Chrome remplira la «fausse entrée» et, lors de la soumission, le serveur prendra la valeur de la «vraie entrée».
la source
Je poste cette réponse pour apporter une solution mise à jour à ce problème. J'utilise actuellement Chrome 49 et aucune réponse donnée ne fonctionne pour celui-ci. Je recherche également une solution fonctionnant avec d'autres navigateurs et versions précédentes.
Mettez ce code au début de votre formulaire
Ensuite, pour votre véritable champ de mot de passe, utilisez
Commentez cette réponse si cela ne fonctionne plus ou si vous rencontrez un problème avec un autre navigateur ou une autre version.
Approuvé le:
la source
à tous ceux qui recherchent une solution à cela, je le trouve enfin.
Chrome n'obéit à la saisie semi-automatique = "off" que si la page est une page HTML5 (j'utilisais XHTML).
J'ai converti ma page en HTML5 et le problème a disparu (facepalm).
la source
Remplacez l'attribut de type d'entrée par
type="search"
.Google n'applique pas le remplissage automatique aux entrées avec un type de recherche.
la source
Jusqu'à la semaine dernière, les deux solutions ci-dessous semblaient fonctionner pour Chrome, IE et Firefox. Mais avec la sortie de la version 48 de Chrome (et toujours en 49), ils ne fonctionnent plus:
Les éléments suivants dans l'élément d'entrée de mot de passe:
autocomplete = "off"
Donc, pour résoudre ce problème rapidement, j'ai d'abord essayé d'utiliser un hack majeur en définissant initialement l'élément d'entrée de mot de passe sur désactivé, puis j'ai utilisé un setTimeout dans la fonction de document prêt pour le réactiver.
Mais cela semblait si fou et j'ai fait plus de recherches et trouvé la réponse @tibalts dans Désactiver le remplissage automatique de Chrome . Sa réponse est d'utiliser autocomplete = "new-password" dans l'entrée des mots de passe et cela semble fonctionner sur tous les navigateurs (j'ai conservé mon correctif numéro 1 ci-dessus à ce stade).
Voici le lien dans la discussion des développeurs Google Chrome: https://code.google.com/p/chromium/issues/detail?id=370363#c7
la source
autocomplete=off
est largement ignoré dans les navigateurs modernes - principalement en raison des gestionnaires de mots de passe, etc.Vous pouvez essayer d'ajouter ceci,
autocomplete="new-password"
il n'est pas entièrement pris en charge par tous les navigateurs, mais cela fonctionne sur certainsla source
autocomplete="off"
fonctionne généralement, mais pas toujours. Cela dépendname
du champ de saisie. Des noms comme "adresse", "e-mail", "nom" - seront complétés automatiquement (les navigateurs pensent qu'ils aident les utilisateurs), lorsque des champs comme "code", "pin" - ne seront pas complétés automatiquement (s'ilautocomplete="off"
est défini)Mes problèmes étaient - la saisie semi-automatique dérangeait l' aide de l'adresse Google
Je l'ai corrigé en le renommant
de
à
Testé en chrome 71.
la source
Au lieu d' autocomplete = "off", utilisez autocomplete = "false" ;)
à partir de: https://stackoverflow.com/a/29582380/75799
la source
Je ne sais pas pourquoi cela a fonctionné dans mon cas, mais sur Chrome, j'ai utilisé
autocomplete="none"
et Chrome a cessé de suggérer des adresses pour mon champ de texte.la source
À partir de Chrome 42, aucune des solutions / hacks de ce fil (à partir de
2015-05-21T12:50:23+00:00
) ne fonctionne pour désactiver la saisie semi-automatique pour un champ individuel ou le formulaire entier.EDIT: J'ai constaté que vous n'avez en fait besoin d'insérer qu'un seul champ de courriel factice dans votre formulaire (vous pouvez le masquer avec
display: none
) avant les autres champs pour empêcher la saisie semi-automatique. Je suppose que Chrome stocke une sorte de signature de formulaire avec chaque champ rempli automatiquement et l'inclusion d'un autre champ de courrier électronique corrompt cette signature et empêche la saisie semi-automatique.La bonne nouvelle est que puisque la "signature de formulaire" est corrompue par cela, aucun des champs n'est rempli automatiquement, donc aucun JS n'est nécessaire pour effacer les faux champs avant la soumission.
Ancienne réponse:
La seule chose que j'ai trouvée encore viable est d'insérer deux champs fictifs de type email et mot de passe avant les vrais champs. Vous pouvez les configurer
display: none
pour les cacher (ce n'est pas assez intelligent pour ignorer ces champs):Malheureusement, les champs doivent être dans votre formulaire (sinon les deux ensembles d'entrées sont remplis automatiquement). Donc, pour que les faux champs soient vraiment ignorés, vous aurez besoin de JS à exécuter sur le formulaire de soumission pour les effacer:
Notez ci-dessus que la suppression de la valeur avec Javascript fonctionne pour remplacer la saisie semi-automatique. Donc, si perdre le bon comportement avec JS désactivé est acceptable, vous pouvez simplifier tout cela avec un "polyfill" de saisie semi-automatique JS pour Chrome:
la source
J'ai eu un problème similaire où le champ de saisie prenait un nom ou un e-mail. J'ai mis autocomplete = "off" mais Chrome a quand même forcé les suggestions. Il s'avère que c'est parce que le texte de l'espace réservé contenait les mots «nom» et «e-mail».
Par exemple
Je l'ai contourné en mettant un espace de largeur nulle dans les mots de l'espace réservé. Plus de saisie semi-automatique de Chrome.
la source
Dans Chrome 48+, utilisez cette solution:
Mettez les faux champs avant les vrais champs:
Masquer les faux champs:
Tu l'as fait!
Cela fonctionnera également pour les anciennes versions.
la source
autocomplete="off"
sur leform
tag. Essayez également de mettre de fausses entrées immédiatement après laform
balise.Après le chrome v.34, la définition
autocomplete="off"
de la<form>
balise ne fonctionne pasJ'ai fait les changements pour éviter ce comportement ennuyeux:
name
et leid
de l'entrée de mot de passepasswordInput
)(Jusqu'à présent, Chrome ne mettra pas le mot de passe enregistré sur l'entrée, mais le formulaire est maintenant cassé)
Enfin, pour faire fonctionner le formulaire, exécutez ce code lorsque l'utilisateur clique sur le bouton Soumettre, ou chaque fois que vous souhaitez déclencher la soumission du formulaire:
Dans mon cas, j'avais l'habitude de
id="password" name="password"
saisir le mot de passe, donc je les remets avant de déclencher la soumission.la source
Après avoir essayé toutes les solutions, voici ce qui semble fonctionner pour la version chrome: 45, avec formulaire ayant un champ de mot de passe:
la source
Je viens de passer à Chrome 49 et la solution de Diogo Cid ne fonctionne plus.
J'ai fait une solution de contournement différente en masquant et en supprimant les champs au moment de l'exécution après le chargement de la page.
Chrome ignore désormais la solution de contournement d'origine en appliquant les informations d'identification au premier champ affiché
type="password"
et à sontype="text"
champ précédent , j'ai donc masqué les deux champs à l'aide de CSSvisibility: hidden;
Je sais que ça peut sembler pas très élégant mais ça marche.
la source
j'ai trouvé cette solution la plus appropriée:
Il doit être chargé après que dom soit prêt ou après le rendu du formulaire.
la source
Bien que j'accepte la saisie semi-automatique devrait être un choix de l'utilisateur, il y a des moments où Chrome est trop zélé avec cela (d'autres navigateurs peuvent l'être aussi). Par exemple, un champ de mot de passe avec un nom différent est toujours rempli automatiquement avec un mot de passe enregistré et le champ précédent rempli avec le nom d'utilisateur. Cela craint particulièrement lorsque le formulaire est un formulaire de gestion des utilisateurs pour une application Web et que vous ne souhaitez pas que le remplissage automatique le remplisse avec vos propres informations d'identification.
Chrome ignore complètement la saisie semi-automatique = "off" maintenant. Alors que les hacks JS peuvent bien fonctionner, j'ai trouvé un moyen simple qui fonctionne au moment de la rédaction:
Définissez la valeur du champ de mot de passe sur le caractère de contrôle 8 (
"\x08"
en PHP ou
en HTML). Cela empêche Chrome de remplir automatiquement le champ car il a une valeur, mais aucune valeur réelle n'est entrée car il s'agit du caractère de retour arrière.Oui, c'est toujours un hack, mais ça marche pour moi. YMMV.
la source
form
pour créer de nouveaux utilisateurs et modifier les utilisateurs existants, simplement remplacer lesinput
valeurs via JS a supprimé la saisie automatique.