Est-il valide W3C moyen pour désactiver la saisie semi-automatique dans un formulaire HTML?
Lors de l'utilisation de la xhtml1-transitional.dtd
doctype, la collecte d'un numéro de carte de crédit avec le code HTML suivant
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
marquera un avertissement sur le validateur W3C:
il n'y a pas d'attribut "saisie semi-automatique".
Est-il du W3C et les normes sur la façon de désactiver le navigateur de l'auto-complétion sur les champs dans un formulaire?
- Êtes-vous sûr que de jouer avec de l'utilisateur saisie semi-automatique, le réglage est ce que vous voulez faire? Si ils ont allumé, c'est probablement comme ça. La saisie semi-automatique est complètement navigateur fonctionnalité de côté, un peu comme le bouton qui permet à l'utilisateur de changer la taille de police, etc. Ne devriez-vous pas interférer avec leurs souhaits
- Même pour quelque chose d'aussi sensible que numéro de carte de Crédit? Je ne peux pas penser à de très nombreuses personnes qui voudraient que le rappelle - surtout depuis l'auto-complétion est activée par défaut dans la plupart des navigateurs. Si ils le veulent rappeler que mauvais, ils peuvent utiliser quelque chose qui remplit la forme de la barre d'outils Google.
- Mon cas est légèrement différent - je suis rouler mes propres saisie semi-automatique et je n'en veux pas à entrer en conflit avec le navigateur. J'ai juste découvert que autocomplete="off" n'est pas valide, mais il semble que il n'y a pas d'autres solution simple (l'injecter avec le js est tout simplement ridicule)
- parce que parfois, nous voulons offrir un service plus convivial alternative à la norme d'auto-suggestion boîte. @corydoras s'il vous plaît ne pas pousser votre OSX de poids, il n'est pas utile à la résolution de cette question.
- HTML 5 de saisie semi-automatique atrribute: w3schools.com/html5/att_form_autocomplete.asp
- J'ai besoin de le désactiver dans les situations où j'ai utiliser de l'OTP généré des mots de passe de jetons dans mes formulaires. Ce nombre n'est jamais le même et la saisie semi-automatique est totalement inutile là...
- Il ne fonctionne pas sur firefox 6. J'ai essayé de réglage
autocomplete=off
pour la forme et aussi pour les champs de saisie, mais aucun d'entre eux semblent fonctionner. Bien que cela fonctionne pour la première entrée de la forme, ne fonctionne pas pour la deuxième entrée de la même forme - Le problème est que les banques vont tenir le marchand responsable si une transaction frauduleuse a eu lieu... même si c'est la faute du client à 100%. Par conséquent, dans certaines circonstances, il est légitime de désactiver la fonctionnalité pour le client.
- Le problème qui m'a conduit à cette question est que j'ai une interface d'administration pour changer de mot de passe de quelqu'un, mais mon navigateur est auto-remplissage de la " nouveau champ mot de passe avec mon mot de passe, ce qui n'est évidemment pas ce que je veux.
- Il n'est jamais légitime, période. Le comportement imprudent, de la banque, est une autre question.
- votre commentaire est faux. Il est légitime que chaque fois qu'il ya un besoin de l'entreprise pour cela. On ne peut pas penser à tous les cas d'utilisation d'un élément html. Mon client est expressément demandé de le désactiver pour certains domaines de son intranet que ça n'a pas de sens (le texte est toujours différent, par définition, sur les champs).
- Je suis d'accord que c'est un beau désactiver l'histoire/de remplissage automatique pour un CAPTCHA champ de formulaire, comme par définition, la valeur ne se répètent pas. Agréable pour l'utilisateur, comme la fonction est de la pure distraction, mais non nécessaire, de toute manière (l'utilisateur peut ignorer l'histoire) et de ne pas avoir la
autocomplete=off
option, elle n'est pas dangereuse pour la sécurité. - il peut être nocif pour la sécurité dans le cas où plusieurs utilisateurs partagent le même ordinateur dans un petit bureau. Considérons le cas où un médecin des yeux a un ordinateur dans le bureau, et basé sur le web logiciel de gestion de cabinet. La réceptionniste, qui utilise aussi l'ordinateur ne devrait pas avoir la possibilité de se connecter à la pratique des logiciels de gestion avec les médecins des informations d'identification. Ce serait faux et pourrait également être un HIPAA violation. Bien sûr, ils ne devraient pas utiliser le même compte au niveau de l'OS, mais c'est le monde réel.
- C'est ridicule, que c'est même une discussion. Je suis en train de construire une forme qui requiert l'entrée de l'adresse info pour les clients à travers le pays. Lorsque je commence à taper mon propre nom de l'etat, le navigateur "utilement", suggère mon adresse complète de l'histoire (y compris autre adresse de livraison que j'ai utilisées par Amazon), au lieu de la js basé sur typeahead suggestion, vous savez, le NOM de l'état. Pourquoi est-il même une question qui a plus de sens?
Vous devez vous connecter pour publier un commentaire.
Ici est un bon article à partir de la MDC qui explique les problèmes (et les solutions) pour former de l'auto-complétion.
Microsoft a publié quelque chose de similaire ici, en tant que bien.
Pour être honnête, si c'est quelque chose d'important à vos utilisateurs, 'casser' les normes de cette façon semble le plus approprié. Par exemple, Amazon utilise la "saisie semi-automatique" attribut un peu, et il semble bien fonctionner.
Si vous souhaitez supprimer l'avertissement entièrement, vous pouvez utiliser JavaScript pour appliquer l'attribut pour les navigateurs qui le supportent (IE et Firefox sont les principaux navigateurs) à l'aide de
someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
Enfin, si votre site est à l'aide de HTTPS, c'est à dire s'éteint automatiquement l'autocomplétion (comme le font certains autres navigateurs, autant que je sache).
Mise à jour
Que cette réponse est encore tout à fait un peu de upvotes, je voulais juste faire remarquer qu'en HTML5, vous pouvez utiliser la saisie semi-automatique de l'attribut sur votre élément de formulaire. Voir la la documentation sur le W3C pour elle.
autocomplete
peut être utilisé non seulement surform
élément, etoff
valeur fonctionne au moins enchromium-40.0.2214.115
Je serais très surpris si W3C aurait proposé une solution qui fonctionne avec (X)HTML4. La fonctionnalité saisie semi-automatique est entièrement basé sur un navigateur, et a été introduit au cours des dernières années (bien après la norme HTML4 a été écrit).
Ne serais pas surpris si HTML5 aurait un, cependant.
Edit: Comme je le pensais, HTML5 ne ont que fonctionnalité. Pour définir votre page HTML5, utiliser le doctype suivante (j'.e: mettre ce que le premier texte dans votre code source). Notez que tous les navigateurs prennent en charge cette norme, comme c'est encore en projet-forme.
HTML 4: Pas de
HTML 5: Oui
Référence: W3
Pas, mais le navigateur de l'auto-complétion est souvent déclenchée par le champ ayant le même
name
attribut que les champs qui ont été précédemment rempli. Si vous pouviez monter un moyen astucieux d'avoir un randomisés nom de champ, la saisie semi-automatique ne serait pas en mesure de tirer toutes les valeurs précédemment entrées pour le champ.Si vous deviez donner un champ de saisie d'un nom comme "
email_<?= randomNumber() ?>
", et ensuite le script qui reçoit ces données en boucle par la POSTE ou OBTENIR des variables à la recherche de quelque chose correspondant au modèle "email_[some number]
", vous pouvez retirer ceci, et cela aurait (presque) garantie de succès, quel que soit le navigateur.Non, un bon article est ici en Mozila Wiki.
Je voudrais continuer à utiliser l'invalide
attribute
. Je pense que c'est là que le pragmatisme doit prendre le pas sur la validation.Comment à propos de la configuration avec le JavaScript?
Il n'est pas parfait, mais votre code HTML est valide.
Je suggère d'attraper tous les 4 types d'entrée:
Référence:
:input
tropSi vous utilisez jQuery, vous pouvez faire quelque chose comme ça :
et l'utilisation de la autocompleteOff classe où vous voulez :
Si vous voulez que TOUS vos commentaires à
autocomplete=off
, vous pouvez simplement l'utiliser :autocomplete
attribut d'une manière différente des autres que dans le html$('input.autocompleteOff').val('');
qui semble être OK.D'une autre façon, qui va également contribuer à la sécurité est d'appeler la zone de saisie de quelque chose de différent à chaque fois que vous l'afficher: tout comme un captha. De cette façon, la session peut lire la seule fois d'entrée et de l'Auto-complétion a rien d'aller sur.
Juste un point concernant l'rmeador la question de savoir si vous devriez être interférer avec l'expérience de navigateur: Nous développons de Gestion de Contacts & systèmes de CRM, et lorsque vous saisissez les données d'autres personnes dans un formulaire, vous ne voulez pas constamment ce qui suggère vos propres détails.
Cela fonctionne pour nos besoins, mais ensuite, nous avons le luxe de dire aux utilisateurs d'obtenir un navigateur décent:)
autocomplete="off"
, cela devrait résoudre le problème pour tous les navigateurs modernes.Dans les versions actuelles des navigateurs Gecko, l'attribut autocomplete fonctionne parfaitement. Pour les versions antérieures, remontant à Netscape 6.2, il a travaillé à l'exception des formulaires avec "Adresse" et "Nom"
Mise à jour
Dans certains cas, le navigateur va garder ce qui suggère l'autocomplétion des valeurs, même si l'attribut autocomplete est réglé sur off. Ce comportement inattendu peut être assez déroutant pour les développeurs. Le truc vraiment forcer le pas-elle est à affecter une chaîne de caractères aléatoires à l'attribut, par exemple:
Puisque cette valeur aléatoire n'est pas un
valid one
, le navigateur va abandonner.Documetation
À l'aide d'un hasard attribut "name" qui fonctionne pour moi.
- Je réinitialiser le nom de l'attribut lors de l'envoi du formulaire vous pouvez toujours y accéder par leur nom lorsque le formulaire est envoyé. (à l'aide de l'attribut id pour stocker le nom)
Noter qu'il y a une certaine confusion à propos de l'emplacement de l'attribut autocomplete. Il peut être appliqué à l'ensemble de la balise de FORMULAIRE ou à des balises INPUT, et ce n'était pas vraiment normalisé avant de HTML5 (qui autorise explicitement l' les deux emplacements). Les anciennes docs notamment ce Mozilla article ne mentionne balise FORM. Dans le même temps, certains scanners de sécurité ne regarde pour auto-complétion des balises d'ENTRÉE et se plaindre si il manque (même si il est dans le FORMULAIRE parent). Une analyse plus détaillée de ce gâchis est posté ici: La Confusion sur l'AUTOCOMPLETE=OFF attributs dans les formulaires HTML.
Pas l'idéal, mais vous pouvez changer l'id et le nom de la zone de texte à chaque fois que vous le rendre - vous auriez à suivre côté serveur trop de sorte que vous pourriez obtenir les données.
Ne sais pas si cela va fonctionner ou pas, c'était juste une pensée.
Je pense qu'il y a un moyen plus simple.
Créer un caché d'entrée avec un nom aléatoire (via javascript) et de définir le nom d'utilisateur que. Répéter l'opération avec le mot de passe. De cette façon, votre backend script sait exactement quel est le nom de champ approprié est, tout en gardant la saisie semi-automatique dans l'obscurité.
Je suis probablement mal, mais c'est juste une idée.
Cette solution fonctionne avec moi:
si vous souhaitez utiliser la saisie automatique dans cette région: ajouter
autocomplete="false"
dans l'élémentex:
Valide la saisie semi-automatique off