Lors de l'utilisation du xhtml1-transitional.dtd
doctype, collecte d'un numéro de carte de crédit avec le code HTML suivant
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
signalera un avertissement sur le validateur W3C:
il n'y a pas d'attribut "saisie semi-automatique".
Existe-t-il un moyen W3C / standard de désactiver la saisie automatique du navigateur sur les champs sensibles d'un formulaire?
Réponses:
Voici un bon article du MDC qui explique les problèmes (et les solutions) pour former la saisie semi-automatique. Microsoft a également publié quelque chose de similaire ici .
Pour être honnête, si c'est quelque chose d'important pour vos utilisateurs, «enfreindre» les normes de cette manière semble approprié. Par exemple, Amazon utilise un peu l'attribut 'autocomplete', et il semble bien fonctionner.
Si vous souhaitez supprimer complètement l'avertissement, vous pouvez utiliser JavaScript pour appliquer l'attribut aux navigateurs qui le prennent en charge (IE et Firefox sont les principaux navigateurs) en utilisant
someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
Enfin, si votre site utilise HTTPS, IE désactive automatiquement la saisie semi-automatique (comme le font certains autres navigateurs, pour autant que je sache).
Mise à jour
Comme cette réponse reçoit encore quelques votes positifs, je voulais juste souligner qu'en HTML5, vous pouvez utiliser l'attribut 'autocomplete' sur votre élément de formulaire. Voir la documentation sur le W3C pour cela.
la source
autocomplete
peut être utilisé non seulement sur l'form
élément , et laoff
valeur fonctionne au moins danschromium-40.0.2214.115
Je serais très surpris si le W3C aurait proposé une méthode qui fonctionnerait avec (X) HTML4. La fonctionnalité de saisie semi-automatique est entièrement basée sur un navigateur et a été introduite au cours des dernières années (bien après l'écriture de la norme HTML4).
Cependant, je ne serais pas surpris que HTML5 en ait un.
Edit: Comme je l' ai pensé, HTML5 n'ont que fonction. Pour définir votre page en HTML5, utilisez le doctype suivant (c'est-à-dire: mettez-le comme le tout premier texte dans votre code source). Notez que tous les navigateurs ne prennent pas en charge cette norme, car elle est toujours sous forme de brouillon.
la source
HTML 4 : Non
HTML 5 : Oui
Référence: W3
la source
Non, mais la saisie semi-automatique du navigateur est souvent déclenchée par le champ ayant le même
name
attribut que les champs précédemment remplis. Si vous pouviez créer un moyen intelligent d'avoir un nom de champ aléatoire , la saisie semi-automatique ne serait pas en mesure d'extraire les valeurs entrées précédemment pour le champ.Si vous deviez donner à un champ de saisie un nom tel que "
email_<?= randomNumber() ?>
", puis que le script qui reçoit cette boucle de données via les variables POST ou GET recherche quelque chose correspondant au modèle "email_[some number]
", vous pourriez le retirer et cela aurait ( pratiquement) garantie de succès, quel que soit le navigateur .la source
Non, un bon article est ici dans Mozila Wiki .
Je continuerais à utiliser l'invalide
attribute
. Je pense que c'est là que le pragmatisme devrait l'emporter sur la validation.la source
Que diriez-vous de le configurer avec JavaScript?
Ce n'est pas parfait, mais votre code HTML sera valide.
la source
Je suggère d'attraper les 4 types d'entrée:
Référence:
la source
:input
aussi utiliserSi vous utilisez jQuery, vous pouvez faire quelque chose comme ça:
et utilisez la classe autocompleteOff où vous voulez:
Si vous voulez que TOUTE votre entrée soit
autocomplete=off
, vous pouvez simplement l'utiliser:la source
autocomplete
attribut (invalide) d'une manière différente de celle du html$('input.autocompleteOff').val('');
ce qui semble être OK.Une autre façon - qui contribuera également à la sécurité est d'appeler la zone de saisie quelque chose de différent chaque fois que vous l'affichez: tout comme un captha. De cette façon, la session peut lire l'entrée unique et l'auto-complétion n'a rien à continuer.
Juste un point concernant la question de rmeador de savoir si vous devez interférer avec l'expérience du navigateur: nous développons des systèmes de gestion des contacts et CRM, et lorsque vous saisissez les données d'autres personnes dans un formulaire, vous ne voulez pas qu'il suggère constamment vos propres détails.
Cela fonctionne pour nos besoins, mais nous avons le luxe de dire aux utilisateurs d'avoir un navigateur décent :)
la source
autocomplete="off"
cela devrait résoudre le problème pour tous les navigateurs modernes.Dans les versions actuelles des navigateurs Gecko, l'attribut de saisie semi-automatique fonctionne parfaitement. Pour les versions antérieures, remontant à Netscape 6.2, cela fonctionnait avec l'exception pour les formulaires avec "Adresse" et "Nom"
Mise à jour
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 la non-autocomplétion consiste à affecter une chaîne aléatoire à l'attribut , par exemple:
Puisque cette valeur aléatoire n'est pas un
valid one
, le navigateur abandonnera.Documetation
la source
L'utilisation d'un attribut aléatoire «nom» fonctionne pour moi.
Je réinitialise l'attribut de nom lors de l'envoi du formulaire afin que vous puissiez toujours y accéder par son nom lorsque le formulaire est envoyé. (en utilisant l'attribut id pour stocker le nom)
la source
Notez qu'il y a une certaine confusion sur l'emplacement de l'attribut de saisie semi-automatique. Il peut être appliqué à la balise FORM entière ou à des balises INPUT individuelles, et ce n'était pas vraiment standardisé avant HTML5 (qui autorise explicitement les deux emplacements ). Les documents plus anciens, notamment cet article de Mozilla, ne mentionnent que la balise FORM. En même temps, certains scanners de sécurité ne rechercheront que la saisie semi-automatique dans la balise INPUT et se plaindront si elle est manquante (même si elle se trouve dans le FORMULAIRE parent). Une analyse plus détaillée de ce gâchis est publiée ici: Confusion sur les attributs AUTOCOMPLETE = OFF dans les formulaires HTML .
la source
Pas idéal, mais vous pouvez changer l'identifiant et le nom de la zone de texte à chaque fois que vous la restituez - vous devez également la suivre côté serveur afin de pouvoir extraire les données.
Je ne sais pas si cela fonctionnera ou non, n'était qu'une pensée.
la source
Je pense qu'il existe un moyen plus simple. Créez une entrée cachée avec un nom aléatoire (via javascript) et définissez le nom d'utilisateur sur celui-ci. Répétez avec le mot de passe. De cette façon, votre script principal sait exactement quel est le nom de champ approprié, tout en gardant la saisie semi-automatique dans l'obscurité.
Je me trompe probablement, mais ce n'est qu'une idée.
la source
la source
Cette solution fonctionne avec moi:
si vous voulez utiliser le remplissage automatique dans cette région: ajoutez l'
autocomplete="false"
élément ex:la source
Saisie semi-automatique valide désactivée
la source