429 votes

Existe-t-il un moyen valide au regard du W3C de désactiver la saisie automatique dans un formulaire HTML ?

Lorsque vous utilisez le xhtml1-transitional.dtd collectant un numéro de carte de crédit avec le 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 "autocomplete".

Existe-t-il un moyen conforme aux normes du W3C de désactiver l'autocomplétion du navigateur sur les champs sensibles d'un formulaire ?

10 votes

Êtes-vous sûr que vous voulez jouer avec les paramètres de la saisie automatique de l'utilisateur ? S'il l'a activée, elle lui plaît probablement. La saisie semi-automatique est une fonction entièrement liée au navigateur, tout comme le bouton qui permet à l'utilisateur de modifier la taille de la police, etc. Vous ne devez pas interférer avec leurs souhaits.

113 votes

Même pour quelque chose d'aussi sensible qu'un numéro de carte de crédit ? Je ne vois pas beaucoup de gens qui voudraient qu'on s'en souvienne, d'autant que la saisie automatique est activée par défaut dans la plupart des navigateurs. S'ils veulent à ce point le mémoriser, ils peuvent utiliser quelque chose qui remplit les formulaires comme la barre d'outils Google.

13 votes

Mon cas d'utilisation est légèrement différent : j'utilise mon propre autocomplete et je ne veux pas qu'il entre en conflit avec celui du navigateur. Je viens juste de découvrir que autocomplete="off" n'est pas valide, mais il semble qu'il n'y ait pas d'autre solution simple (l'injecter avec du js est tout simplement stupide).

426voto

Nick Presta Points 13298

Ici est un bon article du MDC qui explique les problèmes (et les solutions) de l'autocomplétion des formulaires. Microsoft a publié quelque chose de similaire ici également.

Pour être honnête, s'il s'agit d'un élément important pour vos utilisateurs, il semble approprié de "briser" les normes de cette manière. Par exemple, Amazon utilise souvent l'attribut "autocomplete", qui semble bien fonctionner.

Si vous souhaitez supprimer entièrement 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 les éléments suivants someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );

Enfin, si votre site utilise HTTPS, IE désactive automatiquement l'autocomplétion (ainsi que d'autres navigateurs, pour autant que je sache).

Mise à jour

Comme cette réponse reçoit encore beaucoup de votes, je voulais juste signaler qu'en HTML5, vous pouvez utiliser l'attribut "autocomplete" sur votre élément de formulaire. Voir le documentation sur le W3C pour cela.

41 votes

Il semble que Firefox ne désactive pas la saisie semi-automatique sur les sites https, mais c'est une information utile. Merci !

3 votes

Safari ne respecte pas l'attribut autocomplete="off". Voir stackoverflow.com/questions/22817801/

1 votes

autocomplete peut être utilisé non seulement sur form élément et off fonctionne au moins dans chromium-40.0.2214.115

65voto

Henrik Paul Points 22787

Je serais très surpris que le W3C ait proposé une méthode qui fonctionne avec le (X)HTML4. La fonction de complétion automatique est entièrement basée sur le navigateur, et a été introduite au cours des dernières années (bien après l'écriture de la norme HTML4).

Je ne serais pas surpris que le HTML5 en ait un, cependant.

Edit : Comme je le pensais, HTML5 fait ont que caractéristique. Pour définir votre page comme HTML5, utilisez le doctype suivant (c'est-à-dire mettez-le comme tout premier texte dans votre code source). Notez que tous les navigateurs ne prennent pas en charge cette norme, car elle est encore à l'état de projet.

<!DOCTYPE html>

7 votes

Tous les navigateurs s'attendent à ce que les anciennes versions de Konqueror le supportent. Même IE6 le supporte. C'est le doctype à adopter.

58voto

RuudKok Points 3730

HTML 4 : Non

HTML 5 : Oui

L'attribut autocomplete est un attribut énuméré. L'attribut a deux états. L'adresse sur correspond à l'état on, et le mot-clé off le mot clé correspond à l'état d'arrêt. L'attribut peut également être omis. Le site valeur manquante par défaut est la sur l'État. Le site off indique que, par par défaut, les contrôles de formulaire dans le formulaire auront leur nom de champ de remplissage automatique défini sur off ; l'état on indique que par défaut, les contrôles du formulaire dans le formulaire auront leur autofill le nom du champ est réglé sur "on".

Référence : W3

0 votes

@freestock.tk Oui, c'est plus clair que tous les autres. La simplicité compte.

32voto

Phantom Watson Points 935

Non, mais l'auto-complétion du navigateur est souvent déclenchée par le fait que le champ a le même nom. name comme des champs qui ont été précédemment remplis. Si vous pouviez trouver un moyen astucieux de faire en sorte que l'attribut nom de champ aléatoire Si le champ n'est pas rempli, la saisie automatique ne pourra pas récupérer les valeurs précédemment saisies dans le champ.

Si vous donnez à un champ d'entrée un nom comme " email_<?= randomNumber() ?> ", puis faire en sorte que le script qui reçoit ces données boucle à travers les variables POST ou GET à la recherche de quelque chose correspondant au motif " email_[some number] "vous pourriez le faire, et le succès serait (pratiquement) garanti, quel que soit le navigateur .

6 votes

Cela rendrait les tests automatiques plus difficiles.

14 votes

Cela rendrait les tests automatiques plus difficiles, seulement si votre logiciel de test ne peut pas vérifier / lire les champs qui pourraient avoir un nombre aléatoire ajouté à eux. Il est peut-être temps de mettre à jour votre logiciel de test automatique.

8 votes

Les informations de la complétion automatique seraient toujours enregistrées dans le répertoire de données du navigateur, n'est-ce pas ?

31voto

David Waters Points 6645

Non, un bon article est ici dans Mozila Wiki .

Je continuerais à utiliser l'invalide attribute . Je pense que c'est là que le pragmatisme doit l'emporter sur la validation.

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