Gibt es eine W3C gültige Weise der automatische Vervollständigung in einem HTML-Formular zu deaktivieren?

StackOverflow https://stackoverflow.com/questions/582244

  •  06-09-2019
  •  | 
  •  

Frage

Wenn die xhtml1-transitional.dtd Doctype verwenden, eine Kreditkartennummer mit dem folgenden HTML sammeln

<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>

Wille Flagge eine Warnung auf dem W3C-Validator:

  

gibt es kein Attribut "Autocomplete".

Gibt es eine W3C / Standards Weg Browser die automatische Vervollständigung auf sensible Felder in einem Formular deaktivieren?

War es hilfreich?

Lösung

Hier ist ein guter Artikel aus der MDC, die die Probleme (und Lösungen) erklärt zu bilden Auto-Vervollständigung. Microsoft hat etwas ähnliches hier , wie gut.

Um ehrlich zu sein, wenn dies etwas Wichtiges zu Ihren Benutzern ist, ‚bricht‘ Standards auf diese Weise angemessen erscheinen. Zum Beispiel verwendet Amazon die ‚Autovervollständigen‘ ziemlich viel zuschreiben, und es scheint gut zu funktionieren.

Wenn Sie die Warnung vollständig entfernen möchten, können Sie JavaScript verwenden, um das Attribut Browser anzuwenden, die es (IE und Firefox sind die wichtigen Browser) mit someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );

Unterstützung

Schließlich, wenn Ihre Website HTTPS verwendet, IE schaltet sich automatisch aus Auto-Vervollständigung (wie auch einige andere Browser, soweit ich weiß).

Aktualisieren

Da diese Antwort noch recht wenige upvotes bekommt, ich wollte nur darauf hinweisen, dass in HTML5, können Sie das ‚Autovervollständigen‘ Attribut auf dem Formular-Elemente verwenden. Finden Sie in der Dokumentation auf W3C für sie.

Andere Tipps

Ich wäre sehr überrascht, wenn W3C einen Weg vorgeschlagen habe, die mit (X) HTML 4 funktionieren würden. Die Funktion zum automatischen Vervollständigung ist vollständig browserbasiert und wurde in den letzten Jahren (auch nach dem HTML4-Standard geschrieben wurde).

eingeführt

Würde mich nicht wundern, wenn HTML5 eine haben würde, wenn.

Edit: Wie ich dachte, HTML5 hat haben, dass Funktion. So definieren Sie Ihre Seite als HTML5, verwenden Sie die folgende Doctype (das heißt: setzen Sie diese als erste Text im Quelltext). Beachten Sie, dass nicht alle Browser diesen Standard unterstützen, wie es noch im Entwurf-Form ist.

<!DOCTYPE html>

HTML 4 : Kein

HTML 5 : Ja

  

Das Autocomplete-Attribut ist ein numerisches Attribut. das Attribut   hat zwei Zustände. Die auf Keyword-Karten auf den Zustand und die Aus   Stichwort Karten in dem ausgeschalteten Zustand. Das Attribut kann auch weggelassen werden. Das   Standardwert fehlt, ist der auf Zustand. Die Aus Zustand zeigt an, dass durch   Standard, Formular-Steuerelemente in Form ihre autofill Feldnamen haben   auf Aus ; die Ein-Zustand zeigt an, dass standardmäßig bilden Kontrollen   das Formular wird ihre autofill Feldnamen „auf“ gesetzt hat.

Referenz: W3

Nein, aber Browser der automatische Vervollständigung oft durch das Feld mit dem gleichen name Attribute als Felder ausgelöst wird, die aus vorher gefüllt war. Wenn Sie könnten rig eine clevere Art und Weise, um ein randomisierten Feldnamen zu haben , die automatische Vervollständigung nicht in der Lage sein, alle zuvor eingegebenen Werte für das Feld zu ziehen.

Wenn Sie sind ein Eingabefeld einen Namen wie „email_<?= randomNumber() ?>“ zu geben, und dann das Skript, das diese Daten Schleife durch die POST erhält oder GET Variablen Suche nach etwas, das Muster „email_[some number]“ passend, können Sie dies ziehen konnten aus, und dies würde (fast) garantiert Erfolg, unabhängig vom verwendeten Browser .

Nein, ein guter Artikel ist hier in Mozila Wiki .

Ich würde weiterhin die ungültige attribute verwenden. Ich denke, das ist, wo Pragmatismus über die Validierung gewinnen sollte.

Wie wäre es mit JavaScript Einstellung?

var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false

Es ist nicht perfekt, aber Ihre HTML wird gültig.

Ich schlage vor, fangen alle vier Arten von Eingabe:

$('form,input,select,textarea').attr("autocomplete", "off");

Referenz:

Wenn Sie jQuery verwenden, können Sie so etwas tun:

$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});

und verwenden Sie die autocompleteOff Klasse, wo Sie wollen:

<input type="text" name="fieldName" id="fieldId" class="firstCSSClass otherCSSClass autocompleteOff" />

Wenn Sie alle Ihre Eingabe wollen autocomplete=off werden, können Sie einfach das verwenden:

$(document).ready(function(){$("input").attr("autocomplete","off");});

Eine andere Art und Weise - die auch mit Sicherheit helfen wird, ist das Eingabefeld etwas anderes jedes Mal, wenn es angezeigt zu nennen: wie ein captha. Auf diese Weise kann die Sitzung die einmalige Lese Eingang und Auto-Complete hat nichts weiter zu machen.

Nur ein Punkt in Bezug auf rmeador die Frage, ob man mit dem Browser Erfahrung stören sollte: Wir entwickeln Kontakt Management & CRM-Systeme, und wenn Sie anderen Menschen die Daten in ein Formular eingeben Sie wollen nicht Ihre eigenen Details ständig was darauf hindeutet, .

Dies funktioniert für unsere Bedürfnisse, aber dann haben wir den Luxus Benutzer zu sagen, einen anständigen Browser zu bekommen:)

autocomplete='off' 

autocomplete="off" dies sollte das Problem für alle modernen Browser beheben.

<form name="form1" id="form1" method="post" autocomplete="off"
   action="http://www.example.com/form.cgi">
  [...]
</form>

In der aktuellen Versionen von Gecko-Browser funktioniert das Autovervollständigen Attribut perfekt. Für frühere Versionen, Netscape zurück 6.2, arbeitete sie mit Ausnahme für Formulare mit „Adresse“ und „Namen“

Aktualisieren

In einigen Fällen wird der Browser darauf hindeutet, Auto-Vervollständigung Werte halten, selbst wenn das Autocomplete-Attribut ausgeschaltet ist. Dieses unerwartete Verhalten kann für Entwickler sehr verwirrend sein. Der Trick, um zu zwingen wirklich die nicht-automatische Vervollständigung ist auf zuweisen eine zufällige Zeichenfolge mit dem Attribute , zum Beispiel:

autocomplete="nope"

Da dieser Zufallswert kein valid one ist, wird der Browser geben.

-Dokumentation über

Mit einem zufälligen 'name' Attribut für mich funktioniert.

setzte ich den Namen Attribut, wenn das Formular zu senden, so dass Sie immer noch über den Namen zugreifen können, wenn das Formular gesendet wird. (Mit dem id-Attribute die Namen speichern)

Beachten Sie, dass einige Verwirrung über die Lage des Autocomplete-Attribut gibt. Es kann entweder auf den gesamten FORM-Tag oder an einzelnen INPUT-Tags angewandt werden, und dies war nicht wirklich vor HTML5 standardisiert (das ausdrücklich erlaubt beide Standorte ). Ältere Dokumente vor allem diese Mozilla Artikel nur Formtag erwähnt. Zur gleichen Zeit werden einige Sicherheitsscanner suchen nur für die automatische Vervollständigung in INPUT-Tag und beschweren, wenn es fehlt (auch wenn es ist in der Mutter FORM). Eine detailliertere Analyse dieses Chaos wird hier gepostet: Verwirrung über Auto-Vervollständigen = OFF Attribute in HTML-Formularen

Nicht ideal, aber man konnte die ID und den Namen der Textbox jedes Mal, wenn Sie es machen ändern -. Sie müßten es Server-Seite verfolgen, so dass Sie, um die Daten bekommen könnten

Nicht sicher, ob dies funktionieren wird oder nicht, war nur ein Gedanke.

Ich denke, es ist ein einfacher Weg. Erstellen Sie einen versteckten Eingang mit einem zufälligen Namen (via Javascript) und den Benutzernamen, das gesetzt. Wiederholen Sie mit dem Passwort. Auf diese Weise Ihres Backend-Skript genau weiß, was der entsprechende Feldname ist, während der automatische Vervollständigung hält im Dunkel.

Ich bin wahrscheinlich falsch, aber es ist nur eine Idee.

if (document.getElementsByTagName) {
    var inputElements = document.getElementsByTagName("input");
    for (i=0; inputElements[i]; i++) {
        if (inputElements[i].className && (inputElements[i].className.indexOf("disableAutoComplete") != -1)) {
            inputElements[i].setAttribute("autocomplete","off");
        }
    }
}

Diese Lösung funktioniert bei mir:

$('form,input,select,textarea').attr("autocomplete", "nope");

Wenn Sie in dieser Region verwenden autofill wollen: add autocomplete="false" in Element Ex:

<input id="search" name="search" type="text" placeholder="Name or Code" autcomplete="false">

Gültige zur automatischen Vervollständigung off

<script type="text/javascript">
    /* <![CDATA[ */
    document.write('<input type="text" id="cardNumber" name="cardNumber" autocom'+'plete="off"/>');
    /* ]]> */ 
</script>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top