Nun, ein bisschen spät zur Party, aber es scheint, dass es ein bisschen Missverständnisse darüber gibt, wie autocomplete
es funktionieren soll und was nicht. Gemäß den HTML-Spezifikationen kann der Benutzeragent (in diesem Fall Chrome) Folgendes überschreiben autocomplete
:
https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
Ein Benutzeragent kann dem Benutzer erlauben, den Feldnamen für das automatische Ausfüllen eines Elements zu überschreiben, z. B. ihn von "Aus" in "Ein" zu ändern, damit Werte trotz der Einwände des Seitenautors gespeichert und vorab ausgefüllt werden können, oder immer "Aus", ohne sich zu erinnern Werte. Benutzeragenten sollten Benutzern jedoch nicht erlauben, den Feldnamen für das automatische Ausfüllen von "Aus" auf "Ein" oder andere Werte trivial zu überschreiben, da dies erhebliche Auswirkungen auf die Sicherheit für den Benutzer hat, wenn alle Werte unabhängig von den Einstellungen der Site immer gespeichert werden.
Im Fall von Chrome haben die Entwickler im Wesentlichen gesagt: "Wir überlassen dies dem Benutzer, um in seinen Einstellungen zu entscheiden, ob er arbeiten möchte autocomplete
oder nicht. Wenn Sie es nicht möchten, aktivieren Sie es nicht in Ihrem Browser." .
Es scheint jedoch, dass dies für meinen Geschmack ein wenig übereifrig ist, aber es ist so, wie es ist. In der Spezifikation werden auch die möglichen Auswirkungen eines solchen Schrittes auf die Sicherheit erörtert:
Das Schlüsselwort "off" gibt an, dass die Eingabedaten der Steuerung besonders empfindlich sind (z. B. der Aktivierungscode für eine Atomwaffe). oder dass es sich um einen Wert handelt, der niemals wiederverwendet wird (z. B. ein einmaliger Schlüssel für eine Bankanmeldung), und der Benutzer die Daten daher jedes Mal explizit eingeben muss, anstatt sich beim Vorfüllen auf die UA verlassen zu können der Wert für ihn; oder dass das Dokument einen eigenen Mechanismus für die automatische Vervollständigung bereitstellt und nicht möchte, dass der Benutzeragent Werte für die automatische Vervollständigung bereitstellt.
Nachdem ich die gleiche Frustration wie alle anderen erlebt hatte, fand ich eine Lösung, die für mich funktioniert. Es ist ähnlich wie die autocomplete="false"
Antworten.
Ein Mozilla-Artikel spricht genau dieses Problem an:
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
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 Nichterfüllung wirklich zu erzwingen, besteht darin, dem Attribut eine zufällige Zeichenfolge zuzuweisen
Der folgende Code sollte also funktionieren:
autocomplete="nope"
Und so sollte jeder der folgenden sein:
autocomplete="false"
autocomplete="foo"
autocomplete="bar"
Das Problem, das ich sehe, ist, dass der Browser-Agent möglicherweise intelligent genug ist, um das autocomplete
Attribut zu lernen und es beim nächsten Anzeigen des Formulars anzuwenden. Wenn dies der Fall ist, kann ich das Problem nur umgehen, autocomplete
indem ich den Attributwert beim Generieren der Seite dynamisch ändere .
Ein erwähnenswerter Punkt ist, dass viele Browser autocomplete
Einstellungen für Anmeldefelder (Benutzername und Passwort) ignorieren . Wie der Mozilla-Artikel besagt:
Aus diesem Grund unterstützen viele moderne Browser Autocomplete = "off" für Anmeldefelder nicht.
- Wenn eine Site für ein Formular die automatische Vervollständigung = "Aus" setzt und das Formular Eingabefelder für Benutzername und Kennwort enthält, bietet der Browser weiterhin an, sich diese Anmeldung zu merken. Wenn der Benutzer zustimmt, füllt der Browser diese Felder beim nächsten Mal automatisch aus Benutzer besucht diese Seite.
- Wenn eine Site für die Eingabefelder für Benutzername und Kennwort die automatische Vervollständigung = "Aus" setzt, bietet der Browser weiterhin an, sich diese Anmeldung zu merken. Wenn der Benutzer zustimmt, füllt der Browser diese Felder beim nächsten Besuch dieser Seite automatisch aus.
Dies ist das Verhalten in Firefox (seit Version 38), Google Chrome (seit 34) und Internet Explorer (seit Version 11).
Zum Schluss noch ein paar Infos, ob das Attribut zum form
Element oder zum input
Element gehört. Die Spezifikation hat wieder die Antwort:
Wenn das Autocomplete-Attribut weggelassen wird, wird stattdessen der Standardwert verwendet, der dem Status des Autocomplete-Attributs des Formularbesitzers des Elements entspricht (entweder "on" oder "off"). Wenn es keinen Formularbesitzer gibt, wird der Wert "on" verwendet.
Damit. Das Einfügen in das Formular sollte für alle Eingabefelder gelten. Das Hinzufügen zu einem einzelnen Element sollte nur für dieses Element gelten (auch wenn das Formular kein Element enthält). Wenn überhaupt autocomplete
nicht eingestellt, wird standardmäßig verwendet on
.
Zusammenfassung
So deaktivieren Sie autocomplete
das gesamte Formular:
<form autocomplete="off" ...>
Oder wenn Sie es dynamisch tun müssen:
<form autocomplete="random-string" ...>
Deaktivieren autocomplete
eines einzelnen Elements (unabhängig davon, ob die Formulareinstellung vorhanden ist oder nicht)
<input autocomplete="off" ...>
Oder wenn Sie es dynamisch tun müssen:
<input autocomplete="random-string" ...>
Und denken Sie daran, dass bestimmte Benutzeragenten selbst Ihre am härtesten umkämpften Deaktivierungsversuche außer Kraft setzen können autocomplete
.