Wie deaktiviere ich die automatische Vervollständigung des Browsers für das Feld / Eingabe-Tag des Webformulars?


2789

Wie deaktivieren Sie autocompletein den wichtigsten Browsern für eine bestimmte input(oder form field)?


2
In einigen Systemen, in denen Tester immer wieder viele Informationen manuell eingeben müssen, kann es nützlich sein, die Option als konfigurierbar zu haben, damit Sie sie beim Testen deaktivieren und einfach auf 'Tab> Abwärtspfeil> Tab> Abwärtspfeil usw. klicken können. . '
Simon_Weaver

Antworten:


2624

Firefox 30 ignoriert autocomplete="off"Kennwörter und fragt stattdessen den Benutzer, ob das Kennwort auf dem Client gespeichert werden soll. Beachten Sie den folgenden Kommentar vom 5. Mai 2014:

  • Der Passwort-Manager fordert immer auf, ein Passwort zu speichern. Passwörter werden nicht ohne Erlaubnis des Benutzers gespeichert.
  • Nach IE und Chrome sind wir der dritte Browser, der diese Änderung implementiert.

Gemäß der Dokumentation zum Mozilla Developer Networkautocomplete verhindert das boolesche Formularelementattribut, dass Formulardaten in älteren Browsern zwischengespeichert werden.

<input type="text" name="foo" autocomplete="off" />

45
Dies funktionierte in Firefox 3.0.3 nicht. Ich musste das Attribut für die automatische Vervollständigung in das FORMULAR und nicht in das EINGABE-Element einfügen.
Winston Fassett

17
Autocomplete ist nur in den HTML 5-Standards definiert, sodass alle Validierungen, die Sie gegen HTML 4
ausführen, unterbrochen werden

96
@ Winston, Sie sollten es sowohl auf dem Formular als auch auf dem Eingabeelement selbst platzieren. Auf diese Weise decken Sie alle Unstandarditäten von Browsern ab.
AviD

83
Denken Sie auch daran, die automatische Vervollständigung = bei Erweiterung zu deaktivieren (wenn Sie Chrome verwenden), bevor Sie Ihre Webanwendung testen. Sonst fühlst du dich wirklich albern wie ich. ;)
Jo Liss


314

Darüber hinaus autocomplete=offkönnen Sie die Namen Ihrer Formularfelder durch den Code, der die Seite generiert, zufällig sortieren lassen, indem Sie möglicherweise am Ende der Namen eine sitzungsspezifische Zeichenfolge hinzufügen.

Wenn das Formular gesendet wird, können Sie diesen Teil entfernen, bevor Sie ihn auf der Serverseite verarbeiten. Dies würde verhindern, dass der Webbrowser den Kontext für Ihr Feld findet, und könnte auch dazu beitragen, XSRF-Angriffe zu verhindern, da ein Angreifer die Feldnamen für eine Formularübermittlung nicht erraten kann.


10
Dies ist eine viel bessere Lösung als die Verwendung von autocomplete = "off". Alles, was Sie tun müssen, ist, bei jedem Laden einer Seite einen neuen Namen zu generieren und diesen Namen für die zukünftige Verwendung in einer $ _SESSION zu speichern:$_SESSION['codefield_name'] = md5(uniqid('auth', true));
Enchance

78
Nein, dies ist keine bessere Lösung, da der bevorzugte Ursprung für diese Einstellung der Benutzeragent ist, der auch als Webbrowser bezeichnet wird. Es gibt einen Unterschied zwischen der Unterstützung bestimmter Verhaltensweisen (was HTML 5 versucht) und der Erzwingung durch die Entscheidung im Namen des Benutzers, was Ihrer Meinung nach eine "viel bessere Lösung" ist.
Amn

15
Diese Lösung kann mit allen Browsern funktionieren, daher ist sie "besser". Trotzdem ist amn richtig. Die Entscheidung, die automatische Vervollständigung im Namen Ihrer Benutzer zu deaktivieren, ist keine gute Idee. Dies bedeutet, dass ich die automatische Vervollständigung nur in ganz bestimmten Situationen deaktivieren würde, z. B. wenn Sie vorhaben, Ihre eigene Funktion zur automatischen Vervollständigung zu erstellen, und keine Konflikte oder seltsames Verhalten wünschen.
Macguru 2000

8
In Bezug auf XSRF-Angriffe bin ich mir nicht sicher, welche Art von Angriff Sie sich vorgestellt haben, aber konnte der Angreifer den Endteil nicht einfach so entfernen, wie Sie es serverseitig tun, um die Felder zu identifizieren? Oder wenn der Angreifer die Felder veröffentlicht, kann er dann keine eigene zufällige Zeichenfolge anhängen, da diese vom Server entfernt wird?
xr280xr

9
@ macguru2000 Das Erstellen einer eigenen Autovervollständigung ist ein völlig legitimer und allgemeiner Anwendungsfall. Eigentlich sollte der Browser es Entwicklern erleichtern, die automatische Vervollständigung zu
deaktivieren,

235

Die meisten gängigen Browser und Passwortmanager (IMHO) ignorieren dies jetzt autocomplete=off.

Warum? Viele Banken und andere "Hochsicherheits" -Websites haben autocomplete=offihre Anmeldeseiten "aus Sicherheitsgründen" hinzugefügt. Dies verringert jedoch die Sicherheit, da die Kennwörter auf diesen Hochsicherheits-Websites seit der automatischen Vervollständigung leicht zu merken (und damit zu knacken) sind war kaputt.

Vor langer Zeit haben die meisten Passwortmanager angefangen, dies zu ignorieren autocomplete=off, und jetzt beginnen die Browser, dasselbe nur für die Eingabe von Benutzernamen / Passwörtern zu tun.

Leider fügen Fehler in den Implementierungen zur automatischen Vervollständigung Benutzernamen- und / oder Kennwortinformationen in unangemessene Formularfelder ein, was zu Fehlern bei der Formularüberprüfung führt, oder noch schlimmer, indem versehentlich Benutzernamen in Felder eingefügt werden, die vom Benutzer absichtlich leer gelassen wurden.

Was kann ein Webentwickler tun?

  • Wenn Sie alle Kennwortfelder auf einer Seite für sich behalten können, ist dies ein guter Anfang, da das Vorhandensein eines Kennwortfelds anscheinend der Hauptauslöser für die automatische Vervollständigung von Benutzer / Pass ist. Lesen Sie andernfalls die folgenden Tipps.
  • Safari stellt fest , dass 2 Kennwortfelder vorhanden sind, und deaktiviert in diesem Fall die automatische Vervollständigung, vorausgesetzt, es muss sich um ein Formular zum Ändern des Kennworts handeln, nicht um ein Anmeldeformular. Verwenden Sie daher nur 2 Kennwortfelder (neu und neu bestätigen) für alle Formulare, die Sie zulassen
  • Chrome 34 versucht leider, Felder mit Benutzer / Pass automatisch auszufüllen, wenn ein Kennwortfeld angezeigt wird. Dies ist ein ziemlich schlimmer Fehler, der hoffentlich das Safari-Verhalten ändern wird. Wenn Sie dies jedoch oben in Ihrem Formular hinzufügen, wird das automatische Ausfüllen des Kennworts anscheinend deaktiviert:

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

Ich habe IE oder Firefox noch nicht gründlich untersucht, werde aber gerne die Antwort aktualisieren, wenn andere Informationen in den Kommentaren haben.


5
Was meinst du mit "Das Hinzufügen auf deiner Seite scheint das automatische Ausfüllen der Seite zu deaktivieren:"
Wutzebaer

5
@wutzebaer, Chrome bemerkt das versteckte Passwortfeld und hält die automatische Vervollständigung an. Berichten zufolge soll dies verhindern, dass die Site Kennwortinformationen stiehlt, ohne dass der Benutzer dies bemerkt.
David W

6
Ihr Codeausschnitt verhindert die automatische Vervollständigung von Anmeldefeldern in Chrome, Firefox, IE 8 und IE 10. IE 11 wurde nicht getestet. Gutes Zeug! Nur einfache Antwort, die noch funktioniert.
Sam Watkins

3
Ihre Safari-Notiz scheint auch in Chrome zu funktionieren, zumindest ab Dezember 2015. Ich hatte ein Feld für Benutzername und Passwort in einem Registrierungsformular, das automatisch mit Daten aus dem Anmeldeformular vervollständigt wurde. Das Erstellen von zwei type='password'Feldern auf einer Seite führte dazu, dass die automatische Vervollständigung des Browsers "Passwort speichern" ignoriert wurde. Dies war sehr sinnvoll, da Registrierungsformulare das Passwort in der Regel zweimal anfordern, wenn Anmeldeformulare nur einmal danach fragen.
Matt Fletcher

3
Scheint in Chrome 55 nicht mehr zu funktionieren, es sei denn, das zusätzliche Kennwortfeld ist nicht ausgeblendet, was den Zweck zunichte macht.
Jokkedk

160

Manchmal = sogar die automatische Vervollständigung ausgeschaltet würde verhindern , nicht zu füllen Anmeldeinformationen in falsche Felder, aber nicht vom Benutzer oder Spitznamen Feld.

Diese Problemumgehung ist zusätzlich zu Apinsteins Beitrag zum Browserverhalten.

Korrigieren Sie das automatische Ausfüllen des Browsers für schreibgeschützt und setzen Sie die Beschreibbarkeit auf den Fokus (Klicken und Tabulator).

 <input type="password" readonly  
     onfocus="this.removeAttribute('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

Weil der Browser die Anmeldeinformationen automatisch in ein falsches Textfeld ausfüllt!?

Ich bemerke 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. Dann wird das nächste Texteingabefeld, das vor dem Kennwortfeld im DOM angezeigt wird, automatisch ausgefüllt (nur aufgrund von Beobachtungen erraten). Da der Browser die letzte Instanz ist und Sie sie nicht steuern können,

Dieser Readonly-Fix ​​oben hat bei mir funktioniert.


8
Wenn kein Javascript vorhanden ist, schlägt das gesamte Formular fehl. -1
Jimmy Kane

8
@JimmyKane Der Schlüssel wäre, das Attribut zunächst auch mit Javascript hinzuzufügen (was dsuess hier nicht getan hat, sondern nur der Vollständigkeit halber hinzufügt).
Trnelson

@tmelson Ich verstehe, aber warum immer noch js verwenden, um überhaupt zu deaktivieren? Vermeiden wir js für Dinge, die nativ verbessert werden können. Wieder stimme ich Ihnen zu.
Jimmy Kane

3
Dies funktioniert in IE8 nicht richtig. Das schreibgeschützte Kennwortfeld kann beim ersten Fokussieren nicht bearbeitet werden, erst nachdem Sie die Fokussierung aufgehoben und erneut fokussiert haben. Gute Idee, aber leider etwas zu hackig und nicht sicher zu bedienen.
Sam Watkins

Dies funktioniert nicht in allen Browsern (z. B. IE 11 und IE Edge). Sobald das readonlyentfernt wird, führt die nachfolgende Auswahl des Feldes zur automatischen Vervollständigung.
Gone Coding

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

Dies funktioniert in Internet Explorer und Mozilla FireFox. Der Nachteil ist, dass es kein XHTML-Standard ist.


Ich habe festgestellt, dass das Hinzufügen zum Formularelement nicht immer verhindert, dass es auf einzelne Eingaben im Formular angewendet wird. Daher ist es wahrscheinlich am besten, es direkt auf dem Eingabeelement zu platzieren.
Sholsinger

15
Eigentlich @sholsinger, es ist am besten, es sowohl auf dem Formular als auch auf dem Eingabeelement selbst zu platzieren. Auf diese Weise decken Sie alle Unstandarditäten von Browsern ab.
AviD

2
Ab IE 11 respektiert Microsoft dies leider nicht mehr input type="password". Hoffentlich entfernen keine anderen Browser diese Funktionalität.
SamHuckaby

Die Einstellung autocomplete="off"auf formist das einzige, was für Chrome funktioniert hat.
Andrew

106

Die Lösung für Chrome besteht darin autocomplete="new-password", dem Eingabetyp ein Kennwort hinzuzufügen . Bitte überprüfen Sie das Beispiel unten.

Beispiel:

<form name="myForm"" method="post">
   <input name="user" type="text" />
   <input name="pass" type="password" autocomplete="new-password" />
   <input type="submit">
</form>

Chrome vervollständigt die Daten immer automatisch, wenn ein Feld vom Typ Kennwort gefunden wird , das gerade ausreicht, um dieses Feld anzugeben autocomplete = "new-password".

Das funktioniert gut für mich.

Hinweis: Stellen Sie sicher, F12dass Ihre Änderungen wirksam werden. Oft speichern Browser die Seite im Cache. Dies gab mir den schlechten Eindruck, dass es nicht funktioniert hat, aber der Browser hat die Änderungen nicht tatsächlich übernommen.


2
Dies funktioniert in Chrome auch für andere Feldtypen, nicht nur für type = "password".
Jake

Ich habe es mit Passwort, E-Mail und Text verwendet und es hat funktioniert. Ich habe es einfach so benutzt: autocomplete = "new"
Crak_mboutin

autocomplete = "nope" name = "pswd" und verwendet <input name = "dummyPassword" type = "password" style = "display: none;"> vor dem Eingabefeld für das echte Kennwort. Das hat bei mir funktioniert.
Denuka


Dies funktioniert jetzt in fast allen Browsern, nicht nur in Chrome: Autocomplete # Browser_compatibility .
Andrew Morton

60

Wie andere gesagt haben, lautet die Antwort autocomplete="off"

Ich denke jedoch, es lohnt sich zu erwähnen, warum es in bestimmten Fällen eine gute Idee ist, dies zu verwenden, da einige Antworten darauf und doppelte Fragen darauf hindeuten, dass es besser ist, es nicht auszuschalten.

Das Stoppen von Browsern, in denen Kreditkartennummern gespeichert sind, sollte nicht den Benutzern überlassen bleiben. Zu viele Benutzer werden nicht einmal erkennen, dass es sich um ein Problem handelt.

Es ist besonders wichtig, diese Option in Feldern für Kreditkarten-Sicherheitscodes zu deaktivieren. Wie diese Seite sagt:

"Speichern Sie niemals den Sicherheitscode ... sein Wert hängt von der Annahme ab, dass die einzige Möglichkeit, ihn bereitzustellen, darin besteht, ihn von der physischen Kreditkarte zu lesen, um zu beweisen, dass die Person, die ihn liefert, die Karte tatsächlich besitzt."

Das Problem ist, wenn es sich um einen öffentlichen Computer handelt (Cyber-Café, Bibliothek usw.), können andere Benutzer Ihre Kartendaten leicht stehlen, und selbst auf Ihrem eigenen Computer kann eine böswillige Website Daten zur automatischen Vervollständigung stehlen .


7
Wenn ich zu einer Site gehen würde und sie sich an meine Karte in der Dropdown-Liste erinnern würde, wäre ich sehr unglücklich. Ich frage mich, wie sie so nachlässig sein können.
Simon_Weaver

8
Viel einfacher / kritischer Fall. Wenn ich eine Benutzerseite im Administratorbereich meiner Website besuche, wird versucht, deren Benutzernamen und Kennwort als Administratorbenutzername und -kennwort festzulegen, ohne dass festgestellt werden kann, dass dies kein Anmeldeformular ist. Ich möchte, dass mein Administratorkennwort gespeichert wird, aber es ist ein kritischer Fehler, dass versucht wird, diesen gespeicherten Benutzernamen / dieses Kennwort auf alle Benutzer anzuwenden, die ich dann bearbeite.
rjmunro

34

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.


2
Das funktioniert noch besser. Sie können ein kleines JS hinzufügen, das für jedes Laden einer Seite einen zufälligen Code generiert, und diesen Code zum Eingabefeld hinzufügen: <code> function autoId () {var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; für (var i = 0; i <12; i ++) {autoId + = dict.charAt (Math.floor (Math.random () * dict.length)); } return autoId; } $ ('. autocompleteoff'). attr ('autocomplete', autoId ()); </ code> Sie können die autocompleteoffKlasse zu Ihrem gewünschten Eingabefeld hinzufügen .
Raghuram Kasyap

funktioniert nicht in meinem Chrome Version 68.0.3440.106 (Official Build) (64-Bit)
Sukanya Purushothaman

Chrome wurde behoben, um das standardisierte "Aus" jetzt zu verwenden
MacK

1
Leider funktioniert es besser als das, was auf Chrom als Standard bezeichnet wird
Nour Lababidi

1
Heute habe ich festgestellt, dass Chrome zufällige Zeichenfolgen mit "Aus" überschreibt. Ich kann nicht glauben, dass Chrome-Entwickler dieses Attribut schlecht und unkontrolliert machen. Warum ohh ich habe.
Schritt

33

Ich muss darum bitten, mich von den Antworten zu unterscheiden, die besagen, um zu vermeiden, dass die automatische Vervollständigung deaktiviert wird.

Das erste, was Sie ansprechen müssen, ist, dass die automatische Vervollständigung, die in Anmeldeformularfeldern nicht explizit deaktiviert wird, ein PCI-DSS-Fehler ist. Wenn der lokale Computer eines Benutzers gefährdet ist, kann ein Angreifer alle Daten zur automatischen Vervollständigung trivial abrufen, da sie im Clear gespeichert sind.

Es gibt sicherlich ein Argument für die Benutzerfreundlichkeit, aber es gibt eine sehr gute Balance, wenn es darum geht, welche Formularfelder die automatische Vervollständigung deaktivieren sollen und welche nicht.


Ich bin gerade darauf aufmerksam geworden, dass der IE keine onChange-Ereignisse auslöst, wenn Sie eine Texteingabe mit AutoComplete ausfüllen. Wir haben Dutzende von Formularen und über tausend onChange-Ereignisse (Eingabevalidierungen, Geschäftslogik), die über sie verteilt sind. Kürzlich haben wir den IE auf eine neuere Version aktualisiert und plötzlich passierten seltsame Dinge. Glücklicherweise führen wir eine Intranet-App aus und die automatische Vervollständigung ist für uns kein UX-Problem. Es ist einfacher, sie einfach auszuschalten.
Robotron

3
Wenn der lokale Computer eines Benutzers kompromittiert wird, werden diese geschraubt. Es könnte ein Keylogger installiert sein, es könnte ein gefälschtes SSL-Stammzertifikat hinzugefügt und alles über einen falschen Proxy gesendet werden usw. Ich habe einen echten Grund, die automatische Vervollständigung zu deaktivieren - Wenn ich mich als Administrator anmelde und die Bearbeitungsbenutzerseite besuche, wird sie zugewiesen Dieser Benutzer hat meinen Administrator-Benutzernamen und mein Passwort. Ich muss dieses Verhalten verhindern.
rjmunro

1
Browser-Anbieter scheinen nach ihren eigenen Interessen Ausschau zu halten. Gespeicherte Passwörter = Benutzersperre. Und das automatische Ein- und Ausschalten war zu einfach - warum nicht ein komplexer Standard semantischer Hinweise ( html.spec.whatwg.org/multipage/… ), der es dem Browser übrigens ermöglicht, jeweils wertvolle semantische Daten von den Websites zu sammeln Benutzerbesuche?
Aro_tech

Der spezifische Anwendungsfall, den ich zu lösen versuche, ist folgender: Sie sind bereits angemeldet. Jetzt sind sie jedoch dabei, auf etwas noch Sensibleres zuzugreifen. Ich möchte einen Dialog zeigen, in dem sie sich erneut authentifizieren, gegen die Möglichkeit, dass sie weggingen, um zu rauchen, und eine schlechte Person sich auf ihren Stuhl setzte. Ich habe verschiedene Techniken ausprobiert, um die automatische Vervollständigung zu verhindern, und nichts funktioniert. Jetzt denke ich, verwenden Sie vielleicht zumindest das gute alte 'password = window.prompt ("Bitte geben Sie Ihr Passwort erneut ein")' plus den Benutzernamen in der Sitzung und versuchen Sie, dies zu authentifizieren.
David

31

Drei Optionen: Erstens:

<input type='text' autocomplete='off' />

Zweite:

<form action='' autocomplete='off'>

Drittens (Javascript-Code):

$('input').attr('autocomplete', 'off');

2
Die erste und die zweite Option sollten eine Option sein, da sie davon abhängt, wie Browser damit umgehen.
Rybo111

Versucht $ formElement.attr ('autocomplete', 'off'); und es funktioniert nicht.
Ben Sinclair

22

Auf eine verwandte oder tatsächlich auf die völlig entgegengesetzte Note -

"Wenn Sie der Benutzer des oben genannten Formulars sind und die Autovervollständigungsfunktion wieder aktivieren möchten, verwenden Sie das Lesezeichen" Kennwort speichern "auf dieser Lesezeichenseite . Es entfernt alle autocomplete="off"Attribute aus allen Formularen auf der Seite. Kämpfen Sie weiter! ""


20

Wir haben die Idee von sasb tatsächlich für eine Site verwendet. Es war eine Web-App für medizinische Software, um eine Arztpraxis zu betreiben. Viele unserer Kunden waren jedoch Chirurgen, die viele verschiedene Arbeitsplätze nutzten, einschließlich halböffentlicher Terminals. Sie wollten daher sicherstellen, dass ein Arzt, der die Auswirkungen automatisch gespeicherter Passwörter nicht versteht oder nicht aufpasst, seine Anmeldeinformationen nicht versehentlich leicht zugänglich macht. Dies war natürlich vor der Idee des privaten Browsings, das in IE8, FF3.1 usw. eingeführt wird. Trotzdem sind viele Ärzte gezwungen, Browser der alten Schule in Krankenhäusern mit IT zu verwenden, die sich nicht ändern.

Wir haben also die Anmeldeseite zufällige Feldnamen generieren lassen, die nur für diesen Beitrag funktionieren würden. Ja, es ist weniger praktisch, aber es trifft den Benutzer nur über den Kopf, wenn er keine Anmeldeinformationen auf öffentlichen Terminals speichert.


20

Keine der Lösungen hat in diesem Gespräch für mich funktioniert.

Ich habe endlich eine reine HTML-Lösung gefunden , die kein Javascript erfordert , in modernen Browsern funktioniert (außer IE; es musste mindestens 1 Fang geben, oder?) Und die automatische Vervollständigung nicht für das gesamte Formular deaktivieren muss.

Deaktivieren Sie einfach die automatische Vervollständigung auf dem formund schalten Sie sie dann ein, inputwenn Sie möchten, dass sie innerhalb des Formulars funktioniert. Zum Beispiel:

<form autocomplete="off">
    <!-- these inputs will not allow autocomplete and chrome 
         won't highlight them yellow! -->
    <input name="username"  />
    <input name="password" type="password" />
    <!-- this field will allow autocomplete to work even 
         though we've disabled it on the form -->
    <input name="another_field" autocomplete="on" />
</form>

Das war genau das, wonach ich gesucht habe!
Marco

20

Einfach einstellen autocomplete="off". Dafür gibt es einen sehr guten Grund: Sie möchten Ihre eigene Autocomplete-Funktionalität bereitstellen!


20

Ich habe endlose Lösungen ausprobiert und dann Folgendes gefunden:

Anstatt autocomplete="off"einfach nur zu benutzenautocomplete="false"

So einfach ist das und es funktioniert auch in Google Chrome wie ein Zauber!


Wie Sie in Chrom gesagt haben, funktioniert der Aus-Wert nicht. Es muss "falsch" sein
azuax

Funktioniert für mich unter Chrome 44.0.2403.130.
GuiGS

1
Versuchte dies: $ formElement.attr ('autocomplete', 'false'); Entschuldigung, funktioniert nicht.
Ben Sinclair

20

Das funktioniert bei mir.

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

Wir können diese Strategie auch in anderen Steuerelementen wie Text, Auswahl usw. Verwenden


Dies sollte die neueste Antwort sein. Die einzige Antwort, die für mich in neuestem Chrom funktioniert
Nick Chan Abdullah

19

Ich denke, autocomplete=offwird in HTML 5 unterstützt.

Fragen Sie sich, warum Sie dies tun möchten - es kann in einigen Situationen sinnvoll sein, aber tun Sie es nicht nur, um es zu tun.

Es ist weniger bequem für Benutzer und nicht einmal ein Sicherheitsproblem in OS X (von Soren unten erwähnt). Wenn Sie sich Sorgen machen, dass Personen ihre Passwörter aus der Ferne gestohlen haben, kann dies ein Tastendruck-Logger auch dann tun, wenn Ihre App dies verwendet autcomplete=off.

Als Benutzer, der sich dafür entscheidet, dass sich ein Browser (die meisten) meiner Informationen merkt, finde ich es ärgerlich, wenn sich Ihre Website nicht an meine erinnert.


17

Zusätzlich zu

autocomplete="off"

Verwenden

readonly onfocus="this.removeAttribute('readonly');"

für die Eingaben, an die sie sich keine Formulardaten ( usw.) erinnern usernamesollen password, wie unten gezeigt:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

Hoffe das hilft.


1
Für mich in IE11 kann ich nicht in das Textfeld eingeben, selbst nachdem der Onfocus das schreibgeschützte Attribut entfernt hat. Wenn ich jedoch ein zweites Mal auf das Textfeld klicke, kann ich eingeben.
Mcallahan

Ich bin auf dasselbe Problem mit IE11 gestoßen (kann erst beim zweiten Fokus tippen). Das Hinzufügen einer Unschärfe und des erneuten Fokussierens funktioniert. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
Palmsey

@ Andrew Sicher, du kannst. Dies ist das Kernprinzip, um dieses Problem zu überwinden, und ich habe auch ein Update hinzugefügt, das ein vollständiges Codebeispiel enthält;)
Murat Yıldız

Ich habe auch hinzugefügtonfocusout="this.setAttribute('readonly', 'readonly');"
rinatdobr

16

Die beste Lösung:

Verhindern Sie den automatischen Vervollständigungsbenutzernamen (oder die E-Mail-Adresse) und das Kennwort:

<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:

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

Erläuterung: autocompletesetzt die Arbeit in fort <input>, autocomplete="off"funktioniert nicht, aber Sie können offzu einer zufälligen Zeichenfolge wechseln , z nope.

Arbeitet in:

  • Chrom: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 und 64

  • Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 und 58


2
Ich fand, dass dies in meinen vorläufigen Tests funktioniert. So seltsam, dass "Aus" nicht funktioniert.
Craig Jacobs

Dies funktioniert nicht für Chrome unter Android. Ich habe versucht, Zeichenfolgenwerte für das autocompleteAttribut festzulegen, und es werden weiterhin vorherige Einträge als Vorschläge für die automatische Vervollständigung unter der Eingabe angezeigt.
Tebs1200

@ tebs1200 Welches? Das Passwortfeld oder das Textfeld?
Cava

@Cava Entschuldigung für die verspätete Antwort. Das Textfeld. Es spielt keine Rolle, welchen Wert ich eingestellt autocompletehabe, ich erhalte immer noch eine Dropdown-Liste mit Vorschlägen, die auf zuvor eingegebenen Werten basiert. Es ist in Ordnung auf dem Desktop, aber nicht auf Android Chrome.
Tebs1200

14

Ein bisschen spät zum Spiel ... aber ich bin gerade auf dieses Problem gestoßen und habe mehrere Fehler versucht, aber dieser funktioniert für mich auf MDN

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 wie folgt zuzuweisen:

autocomplete="nope"

13

Hinzufügen der

autocomplete="off"

Mit dem Formular-Tag wird die automatische Vervollständigung des Browsers (was zuvor in dieses Feld eingegeben wurde) für alle inputFelder in diesem bestimmten Formular deaktiviert .

Getestet am:

  • Firefox 3.5, 4 BETA
  • Internet Explorer 8
  • Chrom

13

Hinzufügen autocomplete="off" wird es nicht schneiden.

Ä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.


4
Es ist ein Hack. Das Feld ist kein Suchfeld. In Zukunft könnte dies zu Problemen führen.
Roel

12

Verwenden Sie für die Felder einen nicht standardmäßigen Namen und eine ID, sodass "name_" anstelle von "name" "name_" hat. Browser sehen es dann nicht als Namensfeld. Das Beste daran ist, dass Sie dies für einige, aber nicht alle Felder tun können und einige, aber nicht alle Felder automatisch vervollständigen.


Das Problem dabei ist, dass wenn andere Sites "name_" verwenden, um dasselbe Ziel zu erreichen, Sie wieder auf dem ersten Platz sind.
ConroyP

3
Machen Sie es also zu "mysite_name". Wenn jemand anderes das benutzt, würde ich ihm Fragen stellen ...
Steve Perks

Dies bringt einige dieser Dienstprogramme zum automatischen
Auffüllen durcheinander

12

Um das ungültige XHTML zu vermeiden, können Sie dieses Attribut mit Javascript festlegen. Beispiel mit jQuery:

<input type="text" class="noAutoComplete" ... />

$(function() {
    $('.noAutoComplete').attr('autocomplete', 'off');
});

Das Problem ist, dass Benutzer ohne Javascript die Autocomplete-Funktionalität erhalten.


38
Dies vermeidet ungültiges xhtml nicht, sondern fügt das ungültige Bit einfach dynamisch hinzu, nachdem Sie es überprüft haben und es für gültig erklärt hat!
Andiih

@Andiih: Gibt es also eine Möglichkeit, die automatische Vervollständigung in xhtml zum Laufen zu bringen?
Cherouvim

1
Arbeiten (oder aufhören zu arbeiten, was das Ziel ist): Ja wie oben. Aber gültig - nein.
Andiih

11

Probieren Sie diese auch aus, wenn sie einfach autocomplete="off"nicht funktionieren:

autocorrect="off" autocapitalize="off" autocomplete="off"

11

Ich kann nicht glauben, dass dies noch so lange nach der Meldung ein Problem ist. Die oben genannten Lösungen haben bei mir nicht funktioniert, da Safari zu wissen schien, wann das Element nicht angezeigt oder außerhalb des Bildschirms angezeigt wurde. Für mich hat jedoch Folgendes funktioniert:

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

Hoffe das ist nützlich für jemanden!


1
Also, dies vor die tatsächlichen Felder für Benutzername und Passwort zu setzen, hat funktioniert? Der Browser füllte diese und nicht die echten
Andrew

11

Also hier ist es:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">


1
Sieht nach einer guten Idee aus, wenn Textfelder formatiert werden, um das Flashen des sichtbaren Passworts zu verhindern.
Andrew

1
Vielen Dank, dies hat den Job +1 erledigt. Meine Variation Ihrer Lösung bestand darin, sie in einer einzigen Zeile zu erstellen: <input oninput = "this.type = 'password'" id = "inputpassword" type = "text">
Hasnaa Ibraheem

@ HasnaaIbraheem Danke (: manchmal ist besser lesbar besser.
Stav Bodik

11

Dies ist ein Sicherheitsproblem, das Browser jetzt ignorieren. Browser identifizieren und speichern Inhalte mithilfe von Eingabenamen, auch wenn Entwickler der Ansicht sind, dass die Informationen vertraulich sind und nicht gespeichert werden sollten. Wenn Sie einen Eingabenamen zwischen zwei Anforderungen unterscheiden, wird das Problem behoben (wird jedoch weiterhin im Cache des Browsers gespeichert und der Cache des Browsers wird vergrößert). Bitten Sie den Benutzer, Optionen in den Einstellungen seines Browsers zu aktivieren oder zu deaktivieren. Dies ist keine gute Lösung. Das Problem kann im Backend behoben werden.

Hier ist mein Fix. Ein Ansatz, den ich in meinem Framework implementiert habe. Alle Autocomplete-Elemente werden mit einer versteckten Eingabe wie folgt generiert:

<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
    <input type="text" name="<? echo $r; ?>" />
    <input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
    <input type="submit" name="submit" value="submit" />
</form>

Der Server verarbeitet dann Post-Variablen wie folgt:

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

Auf den Wert kann wie gewohnt zugegriffen werden

var_dump($_POST['username']);

Und der Browser kann keine Informationen aus der vorherigen Anfrage oder von früheren Benutzern vorschlagen.

Alles funktioniert wie ein Zauber, auch wenn Browser-Updates die automatische Vervollständigung ignorieren möchten oder nicht. Das war der beste Weg, um das Problem für mich zu beheben.


10

Keiner der hier genannten Hacks hat in Chrome für mich funktioniert. Das Problem wird hier diskutiert: https://code.google.com/p/chromium/issues/detail?id=468153#c41

Hinzufügen in einem <form>Werk (zumindest für den Moment):

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

1
Beachten Sie, dass FireFox mit dieser Technik das verborgene Feld, das beim Absenden des Formulars berücksichtigt wird, weiterhin automatisch ausfüllt. Das wäre wahrscheinlich schlecht, da das Passwort dann über eine möglicherweise ungesicherte Verbindung übertragen würde. Glücklicherweise maxlength="0"verhindert das Hinzufügen , dass Firefox das Feld automatisch ausfüllt.
Mikal Schacht Jensen

9

Sie können in der Eingabe verwenden.

Zum Beispiel;

<input type=text name="test" autocomplete="off" />
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.