Chrome ignoriert Autocomplete = "Aus"

443

Ich habe eine Webanwendung erstellt, die ein Tagbox-Dropdown verwendet. Dies funktioniert in allen Browsern außer dem Chrome-Browser (Version 21.0.1180.89) hervorragend.

Obwohl sowohl die inputFelder als auch das formFeld das autocomplete="off"Attribut enthalten, besteht Chrome darauf, einen Dropdown-Verlauf der vorherigen Einträge für das Feld anzuzeigen, wodurch die Tagbox-Liste gelöscht wird.

Herr Fett
quelle
10
Technisch wurde diese Frage ungefähr 5 Monate vor der Frage gestellt, die als "Diese Frage hat hier bereits eine Antwort" bezeichnet wurde. Das ist das Duplikat, wie es nach diesem kam.
user3071434

Antworten:

318

AKTUALISIEREN

Es scheint, dass Chrome jetzt die Attribute style="display: none;"oder ignoriert style="visibility: hidden;.

Sie können es in etwas ändern wie:

<input style="opacity: 0;position: absolute;">
<input type="password" style="opacity: 0;position: absolute;">

Nach meiner Erfahrung vervollständigt Chrome nur die erste <input type="password">und die vorherige automatisch <input>. Also habe ich hinzugefügt:

<input style="display:none">
<input type="password" style="display:none">

Nach oben <form>und der Fall wurde gelöst.

Diogo Cid
quelle
54
das funktioniert nicht mehr
chrome
8
Das ist nicht nur hässlich, ich kann auch immer noch keine Erklärung für die Warum- Frage finden?
Augustin Riedinger
4
Es scheint, dass Chrome sie jetzt ignoriert, wenn Anzeige: keine verwendet wird, also habe ich die Felder mit absoluter Positionierung aus der Ansicht verschoben ...
Christoph Leiter
1
display: none;wird das Element verschwinden, nichts über die automatische Vervollständigung.
Sandun Perera
276

Verhindern Sie die automatische Vervollständigung von Benutzername (oder E-Mail) und Passwort:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

Verhindern Sie die automatische Vervollständigung eines Felds ( funktioniert möglicherweise nicht ):

<input type="text" name="field" autocomplete="nope">

Erläuterung:

autocompletefunktioniert <input>trotz immer noch an einem autocomplete="off", aber Sie können offzu einem zufälligen String wechseln , wie nope.


Andere "Lösungen" zum Deaktivieren der automatischen Vervollständigung eines Feldes (dies ist nicht der richtige Weg, aber es funktioniert):

1.

HTML:

<input type="password" id="some_id" autocomplete="new-password">

JS (Onload):

(function() {
    var some_id = document.getElementById('some_id');
    some_id.type = 'text';
    some_id.removeAttribute('autocomplete');
})();

oder mit jQuery:

$(document).ready(function() {
    var some_id = $('#some_id');
    some_id.prop('type', 'text');
    some_id.removeAttr('autocomplete');
});

2.

HTML:

<form id="form"></form>

JS (Onload):

(function() {
    var input = document.createElement('INPUT');
    input.type = 'text';
    document.getElementById('form').appendChild(input);
})();

oder mit jQuery:

$(document).ready(function() {
    $('<input>', {
        type: 'text'
    }).appendTo($('#form'));
});

So fügen Sie mit jQuery mehr als ein Feld hinzu:

function addField(label) {
  var div = $('<div>');
  var input = $('<input>', {
    type: 'text'
  });
  
  if(label) {
    var label = $('<label>', {
      text: label
    });
    
    label.append(input);
    div.append(label);    
  } else {
    div.append(input);    
  }  
  
  div.appendTo($('#form'));
}

$(document).ready(function() {
  addField();
  addField('Field 1: ');  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form"></form>


Arbeitet in:

  • Chrome: 49+

  • Firefox: 44+

Cava
quelle
Es gibt keinen Code, nur wie verhindert Ihre Antwort tatsächlich die automatische Vervollständigung, wenn autocomplete = "" nur einen Booleschen
Wert
autocomplete = "neues Passwort", wenn es dem Passwortfeld zugewiesen wurde, hat bei mir in Chrome funktioniert. autocomplete = "off" auf dem Formular nicht.
Second2None
2
Das Wichtigste (und einzige, was für mich funktioniert hat) war absolut sicherzustellen, dass Ihre ID- und Namenseigenschaft Ihres <input> -Felds nicht "Benutzername" oder "Passwort" enthielt. Dies stoppte effektiv alle Autovervollständigungen für mich bei Autocomplete = "off".
GONeale
new-passwordist ein guter Haken für jede versteckte Eingabe, die eigentlich kein Passwort ist, danke
antongorodezkiy
Lol hat autocomplete="nope"tatsächlich für mich gearbeitet, es sei denn, ich füge es meinen beiden Formularfeldern hinzu. Als ob ich es in einem der beiden Felder haben könnte und dieses Feld dann nicht automatisch vervollständigt wird, aber das andere Feld wird immer noch automatisch vervollständigt, aber sobald ich es in beide Felder lege, beginnen beide wieder mit der automatischen Vervollständigung.
PrintlnParams
147

Es scheint, dass Chrome jetzt ignoriert, es autocomplete="off"sei denn, es befindet sich auf dem <form autocomplete="off">Tag.

Eiscreme
quelle
Verwenden Sie für React 'autoComplete = off'.
zero_cool
Eine Erklärung, warum Chrome diese Änderung vorgenommen hat, finden Sie in dieser Antwort: stackoverflow.com/a/39689037/1766230 - Benutzer haben Vorrang vor Entwicklern.
Luke
12
Wenn Sie dem Chrome-Team gültige Gründe für die Verwendung von autocomplete = "off" mitteilen möchten,
Chris
@Digggid Chrome 71 ignoriert das Attribut nicht, in einigen Fällen jedoch den Wert "Aus". Die Verwendung eines Wertes wie "Land" funktioniert bei mir immer noch.
Burak
1
Nur eine Klarstellung darüber, da es widersprüchliche Berichte gibt. Fügen Sie auf dem Formular-Tag autocomplete = "off" und auf den einzelnen Eingabe-Tags autocomplete = "new-password" hinzu. Arbeiten ab Chrome 75
AndyP9
83

Moderner Ansatz

Nehmen Sie einfach Ihre Eingabe vor readonlyund entfernen Sie sie im Fokus. Dies ist ein sehr einfacher Ansatz, und Browser füllen keine readonlyEingaben. Daher wird diese Methode akzeptiert und von zukünftigen Browser-Updates niemals überschrieben.

<input type="text" onfocus="this.removeAttribute('readonly');" readonly />

Der nächste Teil ist optional. Gestalten Sie Ihre Eingabe entsprechend, damit sie nicht wie eine readonlyEingabe aussieht .

input[readonly] {
     cursor: text;
     background-color: #fff;
}

ARBEITSBEISPIEL

Fizzix
quelle
49
@Basit - Und deshalb habe ich es a genannt modern approach. Weniger als 1% der Benutzer auf der Welt haben Javascript deaktiviert. Ehrlich gesagt ist es niemandem wert, sich einem so kleinen Publikum anzupassen, wenn eine große Mehrheit der Websites auf Javascript angewiesen ist. Ich entwickle schon sehr lange Websites und 100% meiner Websites verwenden Javascript und verlassen sich stark darauf. Wenn Benutzer Javascript deaktiviert haben, ist dies ihr eigenes Problem und ihre Wahl, nicht meine. Sie können nicht mindestens 90% der Websites online besuchen oder nutzen, wenn diese deaktiviert sind ... Ihre Ablehnung ist völlig irrelevant.
Fizzix
19
Dies funktioniert heute in 49 nicht mehr. Chrome "Entwickler" beobachten Stackoverflow-Lösungen und entfernen sie.
Puchu
7
Diese Antwort vom September 2015 ist im Grunde eine Kopie der Antwort vom November 2014 unten.
dsuess
5
2019 - funktioniert nicht.
user2060451
1
Dies würde Bildschirmleser brechen
Greg
80

Für eine zuverlässige Problemumgehung können Sie diesen Code zu Ihrer Layoutseite hinzufügen:

<div style="display: none;">
 <input type="text" id="PreventChromeAutocomplete" 
  name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>

Chrome berücksichtigt Autocomplete = off nur, wenn mindestens ein anderes Eingabeelement im Formular mit einem anderen Autocomplete-Wert vorhanden ist.

Dies funktioniert nicht mit Kennwortfeldern - diese werden in Chrome sehr unterschiedlich behandelt. Weitere Informationen finden Sie unter https://code.google.com/p/chromium/issues/detail?id=468153 .

UPDATE: Der Fehler wurde vom Chromium Team am 11. März 2016 als "Won't Fix" geschlossen. Eine vollständige Erklärung finden Sie im letzten Kommentar in meinem ursprünglich eingereichten Fehlerbericht . TL; DR: Verwenden Sie semantische Autocomplete-Attribute wie autocomplete = "new-street-address", um zu vermeiden, dass Chrome das automatische Ausfüllen durchführt.

JT Taylor
quelle
2
@ Jonathan Cowley-Thom: Probieren Sie diese Testseiten aus, die meine Problemumgehung enthalten. Unter hub.securevideo.com/Support/AutocompleteOn sollten Vorschläge zur automatischen Vervollständigung von Chrome angezeigt werden . Versuchen Sie dann dieselben Einträge auf hub.securevideo.com/Support/AutocompleteOff . Vorschläge zur automatischen Vervollständigung von Chrome sollten nicht angezeigt werden. Ich habe dies gerade auf Chrome 45.0.2454.101m und 46.0.2490.71m getestet und es funktionierte wie erwartet auf beiden.
JT Taylor
Noch ein Update zu diesem Thema: Ich habe gerade eine Benachrichtigung vom Chrome-Team erhalten, dass dies behoben wurde. Hoffentlich wird diese Problemumgehung sehr bald nicht mehr benötigt!
JT Taylor
Siehe meinen Beitrag oben: "Dies funktioniert nicht mit Kennwortfeldern - diese werden in Chrome sehr unterschiedlich behandelt. Weitere Informationen finden Sie unter code.google.com/p/chromium/issues/detail?id=468153 ."
JT Taylor
45

Nun, ein bisschen spät zur Party, aber es scheint, dass es ein bisschen Missverständnisse darüber gibt, wie autocompletees 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 autocompleteoder 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 autocompleteAttribut zu lernen und es beim nächsten Anzeigen des Formulars anzuwenden. Wenn dies der Fall ist, kann ich das Problem nur umgehen, autocompleteindem ich den Attributwert beim Generieren der Seite dynamisch ändere .

Ein erwähnenswerter Punkt ist, dass viele Browser autocompleteEinstellungen 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 formElement oder zum inputElement 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 autocompletenicht eingestellt, wird standardmäßig verwendet on.

Zusammenfassung

So deaktivieren Sie autocompletedas gesamte Formular:

<form autocomplete="off" ...>

Oder wenn Sie es dynamisch tun müssen:

<form autocomplete="random-string" ...>

Deaktivieren autocompleteeines 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.

Hooligancat
quelle
1
2019 - funktioniert nicht. Version
76.0
1
@ user2060451 - was funktioniert nicht? Ich habe es gerade in 76.0.3809.87 unter Windows und Mac getestet. - beide arbeiten gemäß Spezifikation. wie oben beschrieben. Wenn Sie etwas mehr Beschreibung als "funktioniert nicht" geben könnten, könnte ich Ihnen möglicherweise helfen.
Hooligancat
1
Ich habe nur versucht, (von der Konsole aus, nachdem alles geladen und auf der Serverseite eingestellt wurde) eine zufällige Zeichenfolge für die automatische Vervollständigung des Eingabeelements zu geben. Es hat nicht funktioniert. Autocomplete = "off" für das Formularelement zu geben, hat ebenfalls nicht funktioniert.
Nuryagdy Mustapayev
29

Chrome Version 34 ignoriert jetzt das autocomplete=off, siehe hier .

Viele Diskussionen darüber, ob dies eine gute oder eine schlechte Sache ist? Was ist deine Meinung?

Peter Kerr
quelle
7
Entschuldigung für die Ablehnung ... Dies ist keine Diskussionsseite (versuchen Sie stattdessen Quora), und Sie geben keine Antwort. Danke für den Link.
Commonpike
25

Browser kümmert sich nicht um Autocomplete = Off Auto oder füllt sogar Anmeldeinformationen in falsches Textfeld?

Ich habe es behoben, indem ich das Passwortfeld auf schreibgeschützt gesetzt und aktiviert habe, wenn der Benutzer darauf klickt oder die Tabulatortaste für dieses Feld verwendet.

Korrigieren Sie das automatische Ausfüllen des Browsers: schreibgeschützt und setzen Sie das Schreiben auf den Fokus (per Mausklick und Durchblättern von Feldern)

 <input type="password" readonly  
     onfocus="$(this).removeAttr('readonly');"/>

Update: Mobile Safari setzt den Cursor in das Feld, zeigt jedoch keine virtuelle Tastatur an. New Fix funktioniert wie zuvor, behandelt jedoch die virtuelle Tastatur:

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />

Live-Demo https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

Übrigens mehr Informationen zu meiner Beobachtung:

Manchmal bemerke ich dieses seltsame Verhalten in Chrome und Safari, wenn Kennwortfelder in derselben Form vorhanden sind. Ich denke, der Browser sucht nach einem Passwortfeld, um Ihre gespeicherten Anmeldeinformationen einzufügen. Anschließend wird der Benutzername automatisch in das nächste textähnliche Eingabefeld ausgefüllt, das vor dem Kennwortfeld im DOM angezeigt wird (nur aufgrund von Beobachtungen erraten). Da der Browser die letzte Instanz ist und Sie sie nicht steuern können, würde manchmal sogar die automatische Vervollständigung = aus nicht verhindern, dass Anmeldeinformationen in falsche Felder eingegeben werden, jedoch nicht in Benutzer- oder Spitznamenfelder.

dsuess
quelle
2
Anstatt onfocus zu verwenden, verwende ich ein setTimeout, um das Readonly zu löschen, sodass meine Benutzer nicht sehen, dass die Eingabe schreibgeschützt ist, und sie niemals fokussieren!
Hippyjim
23

Sie können verwenden autocomplete="new-password"

<input type="email" name="email">
<input type="password" name="password" autocomplete="new-password">

Arbeitet in:

  • Chrome: 53, 54, 55
  • Firefox: 48, 49, 50
Steffi
quelle
Dies kann nicht funktionieren, da die Zeichenfolge für die automatische Vervollständigung behoben ist. Browser werden sich beim nächsten Mal ein neues Passwort merken.
Schritt
23

TL; DR: Teilen Sie Chrome mit, dass dies eine neue Passworteingabe ist und keine alten als Vorschläge für die automatische Vervollständigung bereitgestellt werden:

<input type="password" name="password" autocomplete="new-password">

autocomplete="off" funktioniert aufgrund einer Entwurfsentscheidung nicht - viele Untersuchungen zeigen, dass Benutzer Passwörter viel länger und schwerer hacken können, wenn sie sie in einem Browser oder Passwortmanager speichern können.

Die Spezifikation für autocomplete hat sich geändert und unterstützt jetzt verschiedene Werte, damit Anmeldeformulare einfach automatisch ausgefüllt werden können:

<!-- Auto fills with the username for the site, even though it's email format -->
<input type="email" name="email" autocomplete="username">

<!-- current-password will populate for the matched username input  -->
<input type="password" autocomplete="current-password" />

Wenn Sie diese nicht bereitstellen, versucht Chrome immer noch zu raten, und wenn dies der Fall ist, wird dies ignoriert autocomplete="off".

Die Lösung besteht darin, dass auch autocompleteWerte für Formulare zum Zurücksetzen von Kennwörtern vorhanden sind:

<label>Enter your old password:
    <input type="password" autocomplete="current-password" name="pass-old" />
</label>
<label>Enter your new password:
    <input type="password" autocomplete="new-password" name="pass-new" />
</label>
<label>Please repeat it to be sure:
    <input type="password" autocomplete="new-password" name="pass-repeat" />
</label>

Sie können dieses autocomplete="new-password"Flag verwenden, um Chrome anzuweisen, das Kennwort nicht zu erraten, selbst wenn eines für diese Website gespeichert ist.

Chrome kann Kennwörter für Websites auch direkt mithilfe der Anmeldeinformations-API verwalten , die ein Standard ist und möglicherweise irgendwann universelle Unterstützung bietet.

Keith
quelle
5
Kein wirklich zwingender Grund. Die Tatsache, dass der Benutzer etwas möchte, bedeutet nicht, dass es eine kluge Idee ist. Das ist fast so schlimm wie zu sagen, dass Sie Kennwörter mit einem Zeichen in Ihrer Anwendung zulassen, weil der Benutzer dies für bequemer hält. Manchmal übertrumpft Sicherheit die Bequemlichkeit ...
Daniel Kotin
Ich habe ein Feld namens "ContactNoAlt", das Chrome unbedingt mit einer EmailAddress ausfüllen möchte. Das automatische Ein- und Ausschalten wird bevorzugt, auf praktischer Ebene ist jedoch eine Umgehung erforderlich, da Chrome fehlerhaft ist. Genauer gesagt ist autocomplete = "off" ein Standard - was die Entwickler von Chrome so gut macht, dass sie einfach das Gefühl haben, Standards ignorieren zu können - vielleicht wird Chrome eines Tages entscheiden, dass ein anderes Stück HTML unpraktisch ist ... (dies beginnt sich wie IE5 / 6 de-ja-vu fühlen)
dunxz
Ich bin ein Chrome-Benutzer und möchte dieses Verhalten nicht. Es hat mich nicht einmal gefragt, bevor es das Passwortfeld, das auftauchte, automatisch ausgefüllt hat, um sicherzustellen, dass nur ich auf die betreffende Webanwendung zugreifen kann. Das Speichern einiger Passwörter sollte nicht bedeuten, dass alle Passwörter automatisch vervollständigt werden.
Hippyjim
3
Diese Antwort (und das Verhalten von Googles) ignorieren die Tatsache, dass einer der Hauptgründe, warum Sie dies tun möchten, darin besteht, Ihr eigenes Verhalten bei der automatischen Vervollständigung (z. B. Liste aus Datenbank) zu implementieren.
squarelogic.hayden
Sie versuchen, eine eindeutig schlechte Entscheidung von Chrom zu verteidigen. Ich setze die Unternehmensrichtlinien um, die ich nicht ändern kann. Also muss ich jetzt Hacks für Chrom einfügen. Sie arbeiten derzeit. Wenn sie nicht mehr funktionieren, ändert unser Unternehmen den Standardbrowser für Mitarbeiter. Jetzt haben wir das gleiche Verhalten, jedoch mit Hacks und möglicherweise defekten Seiten bei zukünftigen Upgrades. Und wenn man all diese Antworten hier sieht, gibt es viele Entwickler, die diese Hacks verwenden. Gut gemacht, Chrom.
Claudiu Creanga
23

Ich habe den endlosen Kampf mit Google Chrome mit zufälligen Zeichen gelöst. Wenn Sie die automatische Vervollständigung immer mit einer zufälligen Zeichenfolge rendern, wird sie sich nie an etwas erinnern.

<input name="name" type="text" autocomplete="rutjfkde">

Hoffe, dass es anderen Menschen helfen wird.

Schritt
quelle
12

Autocomplete="Off" funktioniert nicht mehr

Versuchen Sie beispielsweise, nur eine zufällige Zeichenfolge anstelle von "Off"zu verwendenAutocomplete="NoAutocomplete"

Ich hoffe, es hilft.

marco burrometo
quelle
5
Funktioniert nicht in Chrome 73
just_user
10

Wenn Chrom das ignoriert autocomplete="off", löse ich es mit einer dummen Art und Weise, bei der "gefälschte Eingabe" verwendet wird, um Chrom zu betrügen, um es zu füllen, anstatt die "echte" zu füllen.

Beispiel:

<input type="text" name="username" style="display:none" value="fake input" /> 
<input type="text" name="username" value="real input"/>

Chrome füllt die "gefälschte Eingabe" aus, und beim Senden übernimmt der Server den Wert "echte Eingabe".

Chang
quelle
10

Ich poste diese Antwort, um eine aktualisierte Lösung für dieses Problem zu finden. Ich verwende derzeit Chrome 49 und es gibt keine Antwort auf diese Frage. Ich suche auch nach einer Lösung, die mit anderen Browsern und früheren Versionen funktioniert.

Fügen Sie diesen Code am Anfang Ihres Formulars ein

<div style="display: none;">
    <input type="text" autocomplete="new-password">
    <input type="password" autocomplete="new-password">
</div>

Verwenden Sie dann für Ihr echtes Passwortfeld

<input type="password" name="password" autocomplete="new-password">

Kommentieren Sie diese Antwort, wenn dies nicht mehr funktioniert oder wenn Sie ein Problem mit einem anderen Browser oder einer anderen Version haben.

Genehmigt am:

  • Chrome: 49
  • Firefox: 44, 45
  • Kante: 25
  • Internet Explorer: 11
Loenix
quelle
1
Leider ist Chrome Version 49.0.2623.87 und es funktioniert nicht für TextBox. Ich sehe immer noch die automatische Vervollständigung.
eYe
8

Für alle, die nach einer Lösung suchen, finde ich es endlich heraus.

Chrome befolgt nur die automatische Vervollständigung = "Aus", wenn es sich bei der Seite um eine HTML5-Seite handelt (ich habe XHTML verwendet).

Ich habe meine Seite in HTML5 konvertiert und das Problem ist verschwunden (facepalm).

Herr Fett
quelle
6

Ändern Sie das Attribut für den Eingabetyp in type="search".

Google wendet keine automatische Füllung auf Eingaben mit einer Art von Suche an.

Matas Vaitkevicius
quelle
1
Ich werde abstimmen: getestet auf Chrom 60: Dies verhindert nicht die automatische Vervollständigung ..
boly38
6

Bis letzte Woche schienen die beiden folgenden Lösungen für Chrome, IE und Firefox zu funktionieren. Mit der Veröffentlichung von Chrome Version 48 (und immer noch in 49) funktionieren sie jedoch nicht mehr:

  1. Folgendes oben im Formular:
<input style="display:none" type="text" name="fakeUsername"/>
<input style="display:none" type="password" name="fakePassword"/>
  1. Folgendes im Passworteingabeelement:

    autocomplete = "aus"

Um dies schnell zu beheben, habe ich zunächst versucht, das Kennworteingabeelement zunächst auf deaktiviert zu setzen, und dann ein setTimeout in der Dokumentbereitschaftsfunktion verwendet, um es wieder zu aktivieren.

setTimeout(function(){$('#PasswordData').prop('disabled', false);}, 50);

Aber das schien so verrückt zu sein und ich suchte weiter und fand @tibalts Antwort in Deaktivieren von Chrome Autofill . Seine Antwort ist, autocomplete = "new-password" in der Passworteingabe zu verwenden, und dies scheint in allen Browsern zu funktionieren (ich habe meine Fixnummer 1 oben zu diesem Zeitpunkt beibehalten).

Hier ist der Link in der Google Chrome-Entwicklerdiskussion: https://code.google.com/p/chromium/issues/detail?id=370363#c7

Prajna
quelle
@JorgeSampayo Funktioniert nur bei Passworteingaben, nicht jedoch bei Texteingaben.
eYe
6

autocomplete=off wird in modernen Browsern weitgehend ignoriert - hauptsächlich aufgrund von Passwort-Managern usw.

Sie können versuchen, dies hinzuzufügen. autocomplete="new-password"Es wird nicht von allen Browsern vollständig unterstützt, funktioniert jedoch bei einigen

Mahdi Afzal
quelle
6

autocomplete="off"funktioniert normalerweise, aber nicht immer. Dies hängt namevom Eingabefeld ab. Namen wie "Adresse", "E-Mail", "Name" werden automatisch vervollständigt (Browser glauben, dass sie Benutzern helfen), wenn Felder wie "Code", "Pin" - nicht automatisch vervollständigt werden (falls autocomplete="off"festgelegt).

Meine Probleme waren - Autocomplete hat mit dem Google Address Helper rumgespielt

Ich habe es behoben, indem ich es umbenannt habe

von

<input type="text" name="address" autocomplete="off">

zu

<input type="text" name="the_address" autocomplete="off">

Getestet in Chrom 71.

Jewgenij Afanasjew
quelle
1
Ich denke, dies ist der neueste Weg, um die automatische Vervollständigung zu entfernen. Arbeiten im Jahr 2020 Mai auf Chrom 81
NIKHIL CM
5

Keine Ahnung, warum dies in meinem Fall funktioniert hat, aber auf Chrome habe ich verwendet autocomplete="none"und Chrome hat aufgehört, Adressen für mein Textfeld vorzuschlagen.

Chris Sprague
quelle
4

Ab Chrome 42 2015-05-21T12:50:23+00:00funktioniert keine der Lösungen / Hacks in diesem Thread (ab ) zum Deaktivieren der automatischen Vervollständigung für ein einzelnes Feld oder das gesamte Formular.

BEARBEITEN: Ich habe festgestellt, dass Sie tatsächlich nur ein Dummy-E-Mail-Feld in Ihr Formular einfügen müssen (Sie können es mit ausblenden display: none), bevor die anderen Felder die automatische Vervollständigung verhindern. Ich gehe davon aus, dass Chrome mit jedem automatisch ausgefüllten Feld eine Art Formularsignatur speichert und ein weiteres E-Mail-Feld einschließt, das diese Signatur beschädigt und das automatische Ausfüllen verhindert.

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

Die gute Nachricht ist, dass, da die "Formularsignatur" dadurch beschädigt wird, keines der Felder automatisch vervollständigt wird, sodass kein JS erforderlich ist, um die gefälschten Felder vor dem Senden zu löschen.

Alte Antwort:

Das einzige, was ich als noch brauchbar befunden habe, ist das Einfügen von zwei Dummy-Feldern vom Typ E-Mail und Passwort vor den realen Feldern. Sie können sie so einstellen, dass sie display: noneausgeblendet werden (es ist nicht klug genug, diese Felder zu ignorieren):

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="password" name="fake_password" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

Leider müssen sich die Felder in Ihrem Formular befinden (andernfalls werden beide Eingabesätze automatisch ausgefüllt). Damit die gefälschten Felder wirklich ignoriert werden, müssen Sie einige JS auf dem Formular-Submit ausführen, um sie zu löschen:

form.addEventListener('submit', function() {
    form.elements['fake_email'].value = '';
    form.elements['fake_password'].value = '';
});

Beachten Sie von oben, dass das Löschen des Werts mit Javascript die automatische Vervollständigung überschreibt. Wenn es also akzeptabel ist, das richtige Verhalten bei deaktiviertem JS zu verlieren, können Sie all dies mit einer JS-Autovervollständigung "Polyfill" für Chrome vereinfachen:

(function(document) {

    function polyfillAutocomplete(nodes) {

        for(var i = 0, length = nodes.length; i < length; i++) {

            if(nodes[i].getAttribute('autocomplete') === 'off') {

                nodes[i].value = '';
            }
        }
    }

    setTimeout(function() {

        polyfillAutocomplete(document.getElementsByTagName('input'));
        polyfillAutocomplete(document.getElementsByTagName('textarea'));

    }, 1);

})(window.document);
Bailey Parker
quelle
4

Ich hatte ein ähnliches Problem, bei dem das Eingabefeld entweder einen Namen oder eine E-Mail enthielt. Ich habe autocomplete = "off" gesetzt, aber Chrome hat immer noch Vorschläge erzwungen. Es stellte sich heraus, dass der Platzhaltertext die Wörter "Name" und "E-Mail" enthielt.

Zum Beispiel

<input type="text" placeholder="name or email" autocomplete="off" />

Ich habe es umgangen, indem ich in die Wörter im Platzhalter ein Leerzeichen von Null eingefügt habe. Keine automatische Vervollständigung von Chrome mehr.

<input type="text" placeholder="nam&#8203;e or emai&#8203;l" autocomplete="off" />
WDuffy
quelle
4

Verwenden Sie in Chrome 48+ diese Lösung:

  1. Stellen Sie gefälschte Felder vor echte Felder:

    <form autocomplete="off">
      <input name="fake_email"    class="visually-hidden" type="text">
      <input name="fake_password" class="visually-hidden" type="password">
    
      <input autocomplete="off" name="email"    type="text">
      <input autocomplete="off" name="password" type="password">
    </form>
  2. Verstecke gefälschte Felder:

    .visually-hidden {
      margin: -1px;
      padding: 0;
      width: 1px;
      height: 1px;
      overflow: hidden;
      clip: rect(0 0 0 0);
      clip: rect(0, 0, 0, 0);
      position: absolute;
    }
  3. Du hast es geschafft!

Dies funktioniert auch für ältere Versionen.

yivo
quelle
@yivo Sieht so aus, als ob der einzige Unterschied zwischen urs und og answer die! wichtigen Tags sind, also habe ich sie hinzugefügt und funktioniert immer noch nicht. dropbox.com/s/24yaz6ut7ygkoql/…
Mike Purcell
@ MikePurcell Sie haben nicht autocomplete="off"auf dem formTag. Versuchen Sie auch, gefälschte Eingaben unmittelbar nach dem formTag zu platzieren.
Yivo
@Yivo: Versuchte deine Vorschläge, funktionierte gut für das E-Mail-Feld, aber das Dropdown-Menü für das automatische Ausfüllen erfolgt immer noch für das Passwortfeld. dropbox.com/s/5pm5hjtx1s7eqt3/…
Mike Purcell
3

Nach dem Chrome v. 34 funktioniert die Einstellung autocomplete="off"am <form>Tag nicht

Ich habe die Änderungen vorgenommen, um dieses nervige Verhalten zu vermeiden:

  1. Entfernen Sie das nameund das idder Passworteingabe
  2. Legen Sie eine Klasse in den Eingang (ex .: passwordInput)

(Bisher hat Chrome das gespeicherte Passwort nicht in die Eingabe eingefügt, aber das Formular ist jetzt fehlerhaft.)

Damit das Formular funktioniert, müssen Sie diesen Code ausführen, wenn der Benutzer auf die Schaltfläche "Senden" klickt oder wenn Sie das Senden des Formulars auslösen möchten:

var sI = $(".passwordInput")[0];
$(sI).attr("id", "password");
$(sI).attr("name", "password");

In meinem Fall habe ich früher id="password" name="password"die Passworteingabe eingegeben, also habe ich sie zurückgesetzt, bevor ich die Übermittlung ausgelöst habe.

Renato Lochetti
quelle
3

Nachdem Sie alle Lösungen ausprobiert haben, scheint Folgendes für die Chrome-Version 45 zu funktionieren: Formular mit Kennwortfeld:

 jQuery('document').ready(function(){
        //For disabling Chrome Autocomplete
        jQuery( ":text" ).attr('autocomplete','pre'+Math.random(0,100000000));
 });
anshuman
quelle
3

Ich habe gerade auf Chrome 49 aktualisiert und die Lösung von Diogo Cid funktioniert nicht mehr.

Ich habe eine andere Problemumgehung vorgenommen, um die Felder zur Laufzeit nach dem Laden der Seite auszublenden und zu entfernen.

Chrome ignoriert jetzt die ursprüngliche Problemumgehung, indem die Anmeldeinformationen auf das erste angezeigte type="password" Feld und das vorherige type="text"Feld angewendet werden. Daher habe ich beide Felder mithilfe von CSS ausgeblendet visibility: hidden;

<!-- HTML -->
<form>
    <!-- Fake fields -->
    <input class="chromeHack-autocomplete">
    <input type="password" class="chromeHack-autocomplete">

    <input type="text" placeholder="e-mail" autocomplete="off" />
    <input type="password" placeholder="Password" autocomplete="off" />
</form>

<!-- CSS -->
.chromeHack-autocomplete {
    height: 0px !important;
    width: 0px !important;
    opacity: 0 !important;
    padding: 0 !important; margin: 0 !important;
}

<!--JavaScript (jQuery) -->
jQuery(window).load(function() {
    $(".chromeHack-autocomplete").delay(100).hide(0, function() {
        $(this).remove();
    });
});

Ich weiß, dass es vielleicht nicht sehr elegant erscheint, aber es funktioniert.

Cliff Burton
quelle
2

Ich fand diese Lösung am besten geeignet:

function clearChromeAutocomplete()
{
// not possible, let's try: 
if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) 
{
document.getElementById('adminForm').setAttribute('autocomplete', 'off'); 
setTimeout(function () {
        document.getElementById('adminForm').setAttribute('autocomplete', 'on'); 
}, 1500);
}
}

Es muss nach dom ready oder nach dem Rendern des Formulars geladen werden.

user2241415
quelle
2

Obwohl ich der Meinung bin, dass die automatische Vervollständigung eine Benutzerwahl sein sollte, gibt es Zeiten, in denen Chrome zu eifrig damit umgeht (andere Browser möglicherweise auch). Beispielsweise wird ein Kennwortfeld mit einem anderen Namen weiterhin automatisch mit einem gespeicherten Kennwort gefüllt und das vorherige Feld mit dem Benutzernamen gefüllt. Dies ist besonders dann problematisch, wenn es sich bei dem Formular um ein Benutzerverwaltungsformular für eine Web-App handelt und Sie nicht möchten, dass das automatische Ausfüllen es mit Ihren eigenen Anmeldeinformationen auffüllt.

Chrome ignoriert Autocomplete = "off" jetzt vollständig. Während die JS-Hacks gut funktionieren mögen, habe ich einen einfachen Weg gefunden, der zum Zeitpunkt des Schreibens funktioniert:

Setzen Sie den Wert des Passwortfeldes auf das Steuerzeichen 8 ( "\x08"in PHP oder &#8;in HTML). Dadurch wird verhindert, dass Chrome das Feld automatisch ausfüllt, da es einen Wert hat, aber kein tatsächlicher Wert eingegeben wird, da dies das Rücktastezeichen ist.

Ja, das ist immer noch ein Hack, aber es funktioniert bei mir. YMMV.

spikyjt
quelle
Scheint nicht in Chrome 40 zu funktionieren
Haube
Ich denke, sie haben diesen Hack aufgegriffen und Steuerzeichen im Wert ignoriert, sodass er jetzt als leer ausgewertet wird. Die richtige, aktuelle Lösung finden Sie in der Antwort von @ ice-stackackoverflow.com/a/16130452/752696 .
Spikyjt
Gleicher Anwendungsfall hier: Arbeiten mit der Benutzerverwaltung und automatisches Ausfüllen eigener Anmeldeinformationen. Da es sich jedoch um meinen eigenen Code handelt und ich den Code formzum Erstellen neuer und Bearbeiten vorhandener Benutzer wiederverwenden kann, wurde durch einfaches Überschreiben von inputWerten über JS die automatische Vervollständigung entfernt.
Nuala