wake-up-neo.net

"AutoComplete = Off" funktioniert in Google Chrome Browser nicht

Ich weiß, dass es eine ähnliche Frage zu Stackoverflow gibt, aber keine der Lösungen dort hat für mich funktioniert.

<form autocomplete="off" id="search_form" method="post" action="">
    <input autocomplete="off" type="text" />
</form>

Wie Sie sehen, habe ich autocomplete=off auf BEIDES Formular und Eingabefeld gesetzt, aber Google Chrome zeigt diese Liste der automatischen Vervollständigung immer noch an. Dies ist bei anderen Browsern wie Firefox und Safari nicht der Fall.

Jede andere Lösung, als autocomplete=off auf das Formular-Tag zu setzen?

19
user2492270

Dies ist auf eine Entwurfsentscheidung von Chrome zurückzuführen (jeder Chrome-Benutzer möchte dieses Verhalten).

Der Grund dafür ist, was Google Priorität der Wahlkreise nennt:

  1. Der Benutzer ist König! Was sie wollen, ist wichtig am meisten.
  2. Der Benutzer möchte einen Passwort- oder Autofill-Manager verwenden.
  3. Die Webanwendung gibt an, dass die Formularwerte nicht gespeichert werden sollen.
  4. Die Auswahl des Benutzers ist wichtiger, daher bleiben die Formularwerte erhalten.

Es gibt verschiedene Möglichkeiten, um zu arbeiten, aber es ist sehr wahrscheinlich, dass diese in zukünftigen Chrome-Versionen behoben werden, da die Chrome-Entwickler ihr Verhalten als korrekt und Ihre Problemumgehung als Fehler betrachten.

Selbst wenn die Problemumgehung funktioniert, führt dies zu verwirrendem Verhalten für den Benutzer. Sie erwarten, dass das automatische Ausfüllen der Einstellungen den Einstellungen entspricht.

Viele Benutzer haben sich bereits entschieden, die Einstellungen für die automatische Vervollständigung von Apps mit Plug-Ins oder Skripts zu ignorieren, bei denen nur die automatische Vervollständigung auf der Seite deaktiviert wird - sie hatten diese Wahl bereits.

Sie sollten am besten mit der Annahme umgehen, dass Autocomplete funktionieren kann, und dies berücksichtigen.

Ich persönlich hasse es, wenn Websites mein Passwort nicht zurückrufen und diejenigen, die Browsererweiterungen verwenden, außer Kraft setzen. Ich erstelle jedoch auch Anwendungen für meinen Job, und das Abrufen von Passwörtern gilt als Sicherheitsrisiko, da ein Benutzer seinen Computer möglicherweise nicht gesperrt lässt. Meiner Meinung nach ist das Sperren der Computer durch Benutzer nicht für die lokale IT, nicht für die Anwendung von Bedeutung. Die lokale IT kann die automatische Vervollständigung von Kennwörtern für alle Webanwendungen deaktivieren, wenn ihren Benutzern nicht vertraut werden kann.

Um die Sicherheitsprüfungen zu bestehen, müssen leider einige Anwendungen die automatische Vervollständigung deaktivieren. Es gibt verschiedene Möglichkeiten, dies zu tun, aber sie sind alle schrecklich. Der erste Hack ist, die Passworteingabe komplett neu zu machen:

<input type="hidden" name="password" id="realPassword" />
<input type="password" name="{randomly generated}" 
    onchange="document.getElementById('realPassword').value = this.value" />

Ich habe alles zur Vereinfachung inliniert, aber dies sollte Ihnen eine Vorstellung von dem Hack geben - kein Plug-In oder Browser kann eine Eingabe automatisch mit einem völlig neuen Namen füllen. 

Diese Lösung bricht ab, wenn Sie ARIA und Labels ordnungsgemäß erstellen (da der Browser/die Erweiterung die Eingabe vom Label finden und automatisch füllen kann).

Option 2, auch schrecklich, besteht darin, zu warten, bis die Autovervollständigung abgefeuert wurde, und dann das Feld auszublenden:

<input type="text" name="username" 
    onchange="window.setTimeout(function() { 
        document.getElementById('password').value = ''; 
    }, 100)" />
<input type="password" id="password" />

Wie ich schon sagte, böse.

12
Keith

Es kann ein Fehler in Google Chrome sein. Sie können nicht durch das Erstellen einer versteckten Eingabe betrügen. Die Funktion zum automatischen Abschließen erhält den ersten Eingabetext, um die Daten zu füllen.

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" style="display:none" />
    <input autocomplete="off" type="text" />
</form>
6
Bedonkey

Dies scheint ein wiederkehrendes Problem in Google Chrome zu sein, obwohl das Hinzufügen von Autovervollständigung zur Form did in meinem Build hinzugefügt wurde. In neueren Versionen ist dies möglicherweise nicht mehr der Fall.

Dies ist ein Hack. Geben Sie Ihrer Eingabe eine ID, sagen Sie foo und in JavaScript:

if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) {
    setTimeout(function () {
        document.getElementById('foo').autocomplete = 'off';
    }, 1);
}

Prüfen Sie, ob dies für Sie funktioniert. Der einzige Nachteil ist, dass für diejenigen, die Chrome und mit deaktiviertem JavaScript verwenden, das Feld trotzdem automatisch ausgefüllt wird.

1
federicot

Das Attribut autocomplete ist neu in HTML5.

Da Sie DOCTYPE nicht erwähnt haben, könnte dies meiner Meinung nach der einzig mögliche Grund sein. Weitere Informationen finden Sie unter MDNs Deaktivieren der automatischen Formulareingabe .

Fügen Sie den folgenden HTML5 DOCTYPE hinzu.

<!DOCTYPE html>

FYI: In einigen Browsern müssen Sie möglicherweise eine autocomplete - Funktion für .__ aktivieren. Dies funktioniert (siehe "Einstellungen" im Menü des Browsers).

Sie sind verwenden es korrekt und erwähnen das autocomplete-Attribut unter form element. Es ist jedoch nicht erforderlich, dass es für input-Tag gesondert erwähnt wird.

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" />
</form>

Update: Hier finden Sie eine Liste von Lösungen in autocomplete-Attribut und Webdokumenten mit XHTML .

0
Praveen

versuchen Sie das, arbeitete für mich, nachdem ich ein bisschen herumgespielt hatte

if ( navigator.userAgent.toLowerCase().indexOf('chrome') >= 0 ) {
    $('input[autocomplete="off"]').each( function(){
        var type = $(this).attr( 'type');
        $(this).attr( 'type', '_' + type );
        $(this).attr( 'type', type );
    });
}
0
Luke Snowden

wenn Sie den AJAX - Aufruf verwenden, um Daten an das Backend zu senden. Nach dem Aufruf von AJAX sollten die Kennwortfelder leer sein. Dann wird die Kennwort-Eingabeaufforderung nicht gespeichert.

ZB: $ (# Foo) .val ("");

0
Sirikumara