xhtml1-transitional.dtd
Sammeln Sie bei Verwendung des Doctype eine Kreditkartennummer mit dem folgenden HTML-Code
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
markiert eine Warnung auf dem W3C-Validator:
Es gibt kein Attribut "Autocomplete".
Gibt es eine W3C / Standard-Möglichkeit, die automatische Vervollständigung des Browsers für vertrauliche Felder in einem Formular zu deaktivieren?
Antworten:
Hier ist ein guter Artikel aus dem MDC, der die Probleme (und Lösungen) für die automatische Vervollständigung erklärt. Microsoft hat auch hier etwas Ähnliches veröffentlicht .
Um ehrlich zu sein, wenn dies für Ihre Benutzer wichtig ist, erscheint es angemessen, auf diese Weise gegen Standards zu verstoßen. Zum Beispiel verwendet Amazon das Attribut "Autocomplete" ziemlich oft und es scheint gut zu funktionieren.
Wenn Sie die Warnung vollständig entfernen möchten, können Sie das Attribut mit JavaScript auf Browser anwenden, die es unterstützen (IE und Firefox sind die wichtigen Browser)
someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
Wenn Ihre Site HTTPS verwendet, deaktiviert der IE automatisch die automatische Vervollständigung (soweit ich weiß, auch einige andere Browser).
Aktualisieren
Da diese Antwort immer noch einige positive Stimmen erhält, wollte ich nur darauf hinweisen, dass Sie in HTML5 das Attribut 'Autocomplete' für Ihr Formularelement verwenden können. Weitere Informationen finden Sie in der Dokumentation zu W3C.
quelle
autocomplete
kann nicht nur fürform
Elemente verwendet werden , und deroff
Wert funktioniert mindestens inchromium-40.0.2214.115
Ich wäre sehr überrascht, wenn W3C einen Weg vorgeschlagen hätte, der mit (X) HTML4 funktioniert. Die Autocomplete-Funktion ist vollständig browserbasiert und wurde in den letzten Jahren eingeführt (lange nachdem der HTML4-Standard geschrieben wurde).
Wäre nicht überrascht, wenn HTML5 eine hätte.
Edit: Wie ich dachte, HTML5 macht diese haben Funktion. Um Ihre Seite als HTML5 zu definieren, verwenden Sie den folgenden Doctype (dh: Fügen Sie diesen als allerersten Text in Ihren Quellcode ein). Beachten Sie, dass nicht alle Browser diesen Standard unterstützen, da er noch in Entwurfsform vorliegt.
quelle
HTML 4 : Nein
HTML 5 : Ja
Referenz: W3
quelle
Nein, aber die automatische Vervollständigung des Browsers wird häufig dadurch ausgelöst, dass das Feld dasselbe
name
Attribut aufweist wie die zuvor ausgefüllten Felder. Wenn Sie einen cleveren Weg finden könnten, um einen zufälligen Feldnamen zu erhalten , könnte die automatische Vervollständigung keine zuvor eingegebenen Werte für das Feld abrufen.Wenn Sie einem Eingabefeld einen Namen wie "
email_<?= randomNumber() ?>
" geben und dann das Skript, das diese Datenschleife über die POST- oder GET-Variablen empfängt, nach etwas suchen, das dem Muster "email_[some number]
" entspricht, könnten Sie dies abziehen, und dies hätte ( praktisch) garantierter Erfolg, unabhängig vom Browser .quelle
Nein, ein guter Artikel ist hier im Mozila Wiki .
Ich würde weiterhin das ungültige verwenden
attribute
. Ich denke, hier sollte Pragmatismus die Validierung gewinnen.quelle
Wie wäre es mit JavaScript?
Es ist nicht perfekt, aber Ihr HTML wird gültig sein.
quelle
Ich schlage vor, alle 4 Arten von Eingaben zu erfassen:
Referenz:
quelle
:input
auchWenn Sie jQuery verwenden, können Sie Folgendes tun:
und verwenden Sie die Klasse autocompleteOff, wo Sie möchten:
Wenn Sie ALLE Ihre Eingaben haben möchten
autocomplete=off
, können Sie dies einfach verwenden:quelle
autocomplete
Attribut auf eine andere Weise als im HTML-Code$('input.autocompleteOff').val('');
was in Ordnung zu sein scheint.Eine andere Möglichkeit - die auch zur Sicherheit beiträgt - besteht darin, das Eingabefeld bei jeder Anzeige anders aufzurufen: genau wie eine Captha. Auf diese Weise kann die Sitzung die einmalige Eingabe lesen und die automatische Vervollständigung hat nichts zu tun.
Nur ein Punkt in Bezug auf die Frage von rmeador, ob Sie die Browser-Erfahrung beeinträchtigen sollten: Wir entwickeln Kontaktmanagement- und CRM-Systeme, und wenn Sie die Daten anderer Personen in ein Formular eingeben, möchten Sie nicht, dass diese ständig Ihre eigenen Details vorschlagen.
Dies funktioniert für unsere Bedürfnisse, aber dann haben wir den Luxus, den Benutzern zu sagen, dass sie einen anständigen Browser bekommen sollen :)
quelle
autocomplete="off"
Dies sollte das Problem für alle modernen Browser beheben.In aktuellen Versionen von Gecko-Browsern funktioniert das Autocomplete-Attribut einwandfrei. Bei früheren Versionen, die auf Netscape 6.2 zurückgingen, funktionierte dies mit Ausnahme von Formularen mit "Adresse" und "Name".
Aktualisieren
In einigen Fällen schlägt der Browser weiterhin Werte für die automatische Vervollständigung vor, auch wenn das Attribut für die automatische Vervollständigung deaktiviert ist. Dieses unerwartete Verhalten kann für Entwickler ziemlich rätselhaft sein. Der Trick, um die Nicht-Autovervollständigung wirklich zu erzwingen, besteht darin , dem Attribut eine zufällige Zeichenfolge zuzuweisen , zum Beispiel:
Da dieser Zufallswert kein a ist
valid one
, gibt der Browser auf.Dokumentation
quelle
Die Verwendung eines zufälligen Namensattributs funktioniert bei mir.
Ich habe das Namensattribut beim Senden des Formulars zurückgesetzt, damit Sie beim Senden des Formulars weiterhin über den Namen darauf zugreifen können. (Verwenden des ID-Attributs zum Speichern des Namens)
quelle
Beachten Sie, dass die Position des Attributs für die automatische Vervollständigung verwirrend ist. Es kann entweder auf das gesamte FORM-Tag oder auf einzelne INPUT-Tags angewendet werden, und dies war vor HTML5 nicht wirklich standardisiert (dies erlaubt explizit beide Speicherorte ). In älteren Dokumenten wird in diesem Mozilla-Artikel nur das FORM-Tag erwähnt. Gleichzeitig suchen einige Sicherheitsscanner nur im INPUT-Tag nach Autocomplete und beschweren sich, wenn es fehlt (auch wenn es sich im übergeordneten FORMULAR befindet). Eine detailliertere Analyse dieses Durcheinanders finden Sie hier: Verwirrung über AUTOCOMPLETE = OFF-Attribute in HTML-Formularen .
quelle
Nicht ideal, aber Sie können die ID und den Namen des Textfelds jedes Mal ändern, wenn Sie es rendern. Sie müssen es auch serverseitig verfolgen, damit Sie die Daten herausholen können.
Nicht sicher, ob dies funktionieren wird oder nicht, war nur ein Gedanke.
quelle
Ich denke, es gibt einen einfacheren Weg. Erstellen Sie eine versteckte Eingabe mit einem zufälligen Namen (über Javascript) und setzen Sie den Benutzernamen darauf. Wiederholen Sie mit dem Passwort. Auf diese Weise weiß Ihr Backend-Skript genau, wie der entsprechende Feldname lautet, während die automatische Vervollständigung im Dunkeln bleibt.
Ich liege wahrscheinlich falsch, aber es ist nur eine Idee.
quelle
quelle
Diese Lösung funktioniert bei mir:
Wenn Sie das automatische Ausfüllen in dieser Region verwenden möchten, fügen Sie das
autocomplete="false"
Element hinzu, z.quelle
Gültige automatische Vervollständigung aus
quelle