Das automatische Ausfüllen des Google Chrome-Formulars und sein gelber Hintergrund


245

Ich habe ein Designproblem mit Google Chrome und seiner Funktion zum automatischen Ausfüllen von Formularen. Wenn sich Chrome ein Login / Passwort merkt, ändert sich die Hintergrundfarbe in eine gelbe.

Hier einige Screenshots:

Alt-Text Alt-Text

Wie entferne ich diesen Hintergrund oder deaktiviere einfach das automatische Ausfüllen?


4
Ich würde auch gerne sehen, ob es eine Antwort darauf gibt.
Kyle

12
Für das Styling kann diese Farbe ernsthaft mit Designelementen, wie der Gliederung in Eingabe-Tags in Chrome, einhergehen. Ich möchte die Farbe eher ändern als deaktivieren.
Kyle

3
Google scheint dieses Problem bis zu einem gewissen Grad anzuerkennen. Siehe code.google.com/p/chromium/issues/detail?id=46543
MitMaro

1
Um die automatische Vervollständigung zu deaktivieren, können Sie Ihrem Eingabeelement autocomplete = "off" hinzufügen , z. B. <input type = "text" id = "input" autocomplete = "off">
joe_young

1
Nur eine zusätzliche Info: Ich wurde davon gebissen, als ich ein Passwortfeld habe. Ich habe meine Felder automatisch hervorgehoben (gelb) und mit seltsamen Werten gefüllt. Und ich habe die Lösung hier gefunden: zigpress.com/2014/11/22/stop-chrome-messing-forms ... Die Lösung befindet sich in dem Abschnitt "Google Chrome Autofill deaktivieren" ... versteckte Felder hinzufügen.
Cokorda Raka

Antworten:


282

Ändern Sie "Weiß" in eine beliebige Farbe.

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
}

4
großartige Idee. Ich würde mich bei 50 oder 100 halten, wann immer dies ausreicht (Eingabefelder normaler Größe), um mögliche Leistungseinbußen bei schwächeren Geräten zu vermeiden. (Und keine Notwendigkeit für px nach 0)
Frank Nocke

4
Ich liebe diesen Hack! Tolles Denken ... Jeder entfernt das automatische Ausfüllen. Ich wollte das automatische Ausfüllen fortsetzen, nur um das hässliche Gelb loszuwerden.
Travis

1
Funktioniert nicht, wenn Sie Hintergrundbilder hinter Ihrem Eingabefeld haben. Füllen Sie einfach den gesamten Bereich mit Weiß. Ich habe alle Lösungen auf dieser Seite ausprobiert, einschließlich der jquery-basierten, und sie haben bei mir nicht funktioniert. Am Ende musste ich dem Feld autocomplete = "off" hinzufügen.
Myke Black

19
Um auch die -webkit-text-fill-color
Erwin Wessels

2
Es gibt einen Fehler, ich habe vielleicht nicht die Syntax geändert, aber das funktioniert jetzt:box-shadow: inset 0 0 0 1000px white !important;
Muhammad Umer

49

Wenn ihr transparente Eingabefelder wollt, könnt ihr Übergang und Übergangsverzögerung verwenden.

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    -webkit-transition-delay: 9999s;
    -webkit-transition: color 9999s ease-out, background-color 9999s ease-out;
}

Beste Lösung für mich, da RGBA-Farbwerte nicht funktionierten -webkit-box-shadow. Außerdem müssen für diese Deklaration keine Farbwerte angegeben werden: Die Standardwerte gelten weiterhin.
Sébastien

Noch besser ist es, die Übergangsverzögerung anstelle ihrer Dauer zu verwenden, um überhaupt keine Farbmischung zu haben
antoine129

gut, aber aus irgendeinem Grund musste ich diese Regel am Ende der Datei verschieben, sonst hat es nicht funktioniert
Igor Mizak

Das habe ich gesucht! Danke dir!
Akhmedzianov Danilian

43

Lösung hier :

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
    $(window).load(function(){
        $('input:-webkit-autofill').each(function(){
            var text = $(this).val();
            var name = $(this).attr('name');
            $(this).after(this.outerHTML).remove();
            $('input[name=' + name + ']').val(text);
        });
    });
}

Dies hat funktioniert, während die Top-Antwort nicht funktioniert hat. Ich denke jedoch, ich werde nicht versuchen, das Verhalten zu ändern, da a). Dies ist Javascript, es gibt also eine Sekunde zwischen dem Funktionieren und nicht (bis das js geladen wird) und b). Dies kann den Chrome-Benutzer verwirren, der an das Standardverhalten gewöhnt ist.
TK123

3
Mein Chrom
Dustin Silk

Bitte nicht. Dies funktioniert mit keinem JS-Framework, nur für statische Websites.
Akhmedzianov Danilian

26

In Firefox können Sie die automatische Vervollständigung in einem Formular mithilfe des Attributs autocomplete = "off / on" deaktivieren. Ebenso können die automatische Vervollständigung einzelner Elemente mit demselben Attribut festgelegt werden.

<form autocomplete="off" method=".." action="..">  
<input type="text" name="textboxname" autocomplete="off">

Sie können dies in Chrome testen, da es funktionieren sollte.


7
Das Drehen autocomplete="off"ist heutzutage nicht zugänglich.
João

4
Leider funktioniert diese Lösung in Chrome nicht mehr.
Henrywright

1
Dies wird dringend empfohlen, da Sie das eigentliche Problem hier nicht wirklich lösen. Stattdessen erstellen Sie eine neue, indem Sie Benutzer frustrieren, weil sie ihre (vermutlich) Anmeldedaten manuell
eingeben müssen

25

Wenn Sie das automatische Ausfüllen sowie alle Daten, angehängten Handler und Funktionen, die an Ihre Eingabeelemente angehängt sind, beibehalten möchten, versuchen Sie dieses Skript:

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
{
    var _interval = window.setInterval(function ()
    {
        var autofills = $('input:-webkit-autofill');
        if (autofills.length > 0)
        {
            window.clearInterval(_interval); // stop polling
            autofills.each(function()
            {
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }
    }, 20);
}

Es fragt ab, bis es automatisch ausgefüllte Elemente findet, klont sie einschließlich Daten und Ereignisse, fügt sie dann an derselben Stelle in das DOM ein und entfernt das Original. Die Abfrage wird beendet, sobald ein Klon gefunden wird, da das automatische Ausfüllen nach dem Laden der Seite manchmal eine Sekunde dauert. Dies ist eine Variation eines früheren Codebeispiels, jedoch robuster und behält so viele Funktionen wie möglich bei.

(Bestätigt die Arbeit in Chrome, Firefox und IE 8.)


6
Dies war die einzige Lösung, die ich fand, OHNE die automatische Vervollständigung zu deaktivieren.
Xeroxoid

Möglicherweise ist das Einstellen von Intervallen nicht erforderlich, da Chrome automatisch auf window.load ausgefüllt wird.
Timo Huovinen

2
Funktioniert ohne Entfernen der automatischen Vervollständigung, viel bessere Lösung als diejenigen mit Millionen von Stimmen.
Verbündeter

Die anderen Lösungen haben bei mir nicht funktioniert, selbst die am besten bewerteten, aber diese hat funktioniert. Das Problem, das das Gegenteil von dem ist, was @Timo oben gesagt hat, ist, dass Chrome nicht direkt bei window.load automatisch ausgefüllt wird. Obwohl dies funktioniert hat, besteht ein Problem darin, dass die Schleife kontinuierlich ausgeführt wird, wenn keine Webkit-AutoFill-Elemente vorhanden sind. Sie brauchen nicht einmal ein Intervall, damit dies funktioniert. Stellen Sie einfach eine Zeitüberschreitung mit einer Verzögerung von möglicherweise 50 Millisekunden ein, und es funktioniert einwandfrei.
Gavin

16

Das folgende CSS entfernt die gelbe Hintergrundfarbe und ersetzt sie durch eine Hintergrundfarbe Ihrer Wahl. Das automatische Ausfüllen wird nicht deaktiviert und es sind keine jQuery- oder Javascript-Hacks erforderlich.

input:-webkit-autofill {
    -webkit-box-shadow:0 0 0 50px white inset; /* Change the color to your own background color */
    -webkit-text-fill-color: #333;
}
input:-webkit-autofill:focus {
    -webkit-box-shadow: /*your box-shadow*/,0 0 0 50px white inset;
    -webkit-text-fill-color: #333;
}

Lösung kopiert von: Überschreiben Sie das Ausfüllen von Browserformularen und das Hervorheben von Eingaben mit HTML / CSS


Spielt nicht gut, wenn auf das Feld mehrere Schatten angewendet werden.
Strechen meine Kompetenz

6

Arbeitete für mich, nur die CSS-Änderung erforderlich.

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px #ffffff inset!important;
}

Sie können anstelle von #ffffff eine beliebige Farbe verwenden .


3

Ein bisschen hacky, funktioniert aber perfekt für mich

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
}

3

Eine Kombination von Antworten hat bei mir funktioniert

<style>
    input:-webkit-autofill,
    input:-webkit-autofill:hover,
    input:-webkit-autofill:focus,
    input:-webkit-autofill:active {
        -webkit-box-shadow: 0 0 0px 1000px #373e4a inset !important;
           -webkit-text-fill-color: white !important;
   }
</style>

Dies ist das einzige Beispiel, das für mich sowohl mit Text als auch mit Hintergrund auf Chrome Version 53.0.2785.116 m
pleshy

2

Hier ist die MooTools-Version von Jason. Behebt es auch in Safari.

window.addEvent('domready',function() { 
    $('username').focus();

    if ((navigator.userAgent.toLowerCase().indexOf(\"chrome\") >= 0)||(navigator.userAgent.toLowerCase().indexOf(\"safari\") >= 0))
    {

        var _interval = window.setInterval(function ()
        {
            var autofills = $$('input:-webkit-autofill');
            if (autofills.length > 0)
            {

                window.clearInterval(_interval); // stop polling
                autofills.each(function(el)
                {
                    var clone = el.clone(true,true).inject(el,'after');;
                    el.dispose();
                });
            }
        }, 20);                                               


    }
});

1
Verwenden Sie dieses Skript nicht. Wenn keine automatisch ausgefüllten Elemente vorhanden sind, wird die Schleife kontinuierlich mit 20 Millisekunden ausgeführt. Ein Intervall ist nicht erforderlich. Stellen Sie nach window.load eine Zeitüberschreitung von ca. 50 Millisekunden ein. Dies ist ausreichend Zeit, um das Styling zu entfernen.
Gavin

2

Dies behebt das Problem sowohl in Safari als auch in Chrome

if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
window.setInterval(function(){
    $('input:-webkit-autofill').each(function(){
        var clone = $(this).clone(true, true);
        $(this).after(clone).remove();
    });
}, 20);
}

Funktioniert bei mir? Aber der BUG ist immer noch da und wie zu sehen ist, muss kein Datum festgelegt werden. code.google.com/p/chromium/issues/detail?id=46543#c22
Eduardo M

Sie löschen nie Ihr Intervall. Dies ist schlampiger Code, verwenden Sie ihn nicht.
Gavin

1
Eigentlich funktioniert das nicht. Ich kann nichts in die Eingaben eingeben, da sie ständig geklont werden. fast da ...
Dustin Silk

Versuchen Sie dies var id = window.setInterval (function () {$ ('input: -webkit-autofill'). each (function () {var clone = $ (this) .clone (true, true); $ (this) .after (Klon) .remove ();});}, 20); $ ('input: -webkit-autofill'). focus (function () {window.clearInterval (id);});
Dustin Silk

2

Dies hat mir geholfen, eine reine CSS-Version.

input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset; }

wo weiß kann jede Farbe sein, die Sie wollen.


2

Ich benutze das,

input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
/* You can use color:#color to change the color */

1

Fügen Sie einfach diese kleine Codezeile in Ihr Tag ein.

autocomplete="off"

Fügen Sie dies jedoch nicht in das Feld Benutzername / E-Mail / ID-Name ein, da es für dieses Feld deaktiviert wird, wenn Sie weiterhin die automatische Vervollständigung verwenden möchten. Aber ich habe einen Weg gefunden, dies zu umgehen. Platzieren Sie einfach den Code in Ihrem Passworteingabetag, da Sie Passwörter sowieso nie automatisch vervollständigen. Dieser Fix sollte die Farbkraft und die Fähigkeit zur automatischen Vervollständigung von Matinain in Ihrem E-Mail- / Benutzernamenfeld beseitigen und es Ihnen ermöglichen, umfangreiche Hacks wie Jquery oder Javascript zu vermeiden.


1

Wenn Sie es vollständig entfernen möchten, habe ich den Code in den vorherigen Antworten so angepasst, dass er auch beim Schweben, Aktivieren und Fokussieren funktioniert:

input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:active, input:-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0 1000px white inset;
}

1
Hinzufügen eines !importantist notwendig, aber danke, es hat mir sehr geholfen.
Polochon

0

Hier ist eine Mootools-Lösung, die das Gleiche wie die von Alessandro tut - ersetzt jede betroffene Eingabe durch eine neue.

if (Browser.chrome) {
    $$('input:-webkit-autofill').each(function(item) {
        var text = item.value;
        var name = item.get('name');
        var newEl = new Element('input');
        newEl.set('name', name);
        newEl.value = text;
        newEl.replaces(item);
    });
}

0

Was ist mit dieser Lösung:

if ($.browser.webkit) {
    $(function() {
        var inputs = $('input:not(.auto-complete-on)');

        inputs.attr('autocomplete', 'off');

        setTimeout(function() {
            inputs.attr('autocomplete', 'on');
        }, 100);
    });
}

Es schaltet die automatische Vervollständigung und das automatische Ausfüllen aus (so dass gelbe Hintergründe verschwinden), wartet 100 Millisekunden und schaltet dann die automatische Vervollständigung ohne automatische Verfüllung zurück.

Wenn Sie Eingaben haben, die automatisch ausgefüllt werden müssen, geben Sie ihnen die auto-complete-onCSS-Klasse.


0

Keine der Lösungen funktionierte für mich, die Eingabe von Benutzername und Passwort wurde immer noch ausgefüllt und mit dem gelben Hintergrund versehen.

Also fragte ich mich: "Wie bestimmt Chrome, was auf einer bestimmten Seite automatisch ausgefüllt werden soll?"

"Sucht es nach Eingabe-IDs, Eingabenamen? Formular-IDs? Formularaktion?"

Durch meine Experimente mit dem Benutzernamen und den Passworteingaben gab es nur zwei Möglichkeiten, die dazu führten, dass Chrome die Felder, die automatisch ausgefüllt werden sollten, nicht finden konnte:

1) Stellen Sie die Passworteingabe vor die Texteingabe. 2) Geben Sie ihnen den gleichen Namen und die gleiche ID ... oder keinen Namen und keine ID.

Nach dem Laden der Seite können Sie mit Javascript entweder die Reihenfolge der Eingaben auf der Seite ändern oder ihnen dynamisch ihren Namen und ihre ID geben ...

Und Chrome weiß nicht, was es getroffen hat ... die automatische Vervollständigung bleibt ausgeschaltet.

Verrückter Hack, ich weiß. Aber es funktioniert für mich.

Chrome 34.0.1847.116, OSX 10.7.5


0

Der einzige Weg, der für mich funktioniert, war: (jQuery erforderlich)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});

0

Ich habe dieses Problem für ein Passwortfeld behoben, das mir so gefällt:

Stellen Sie den Eingabetyp auf Text anstelle von Kennwort ein

Entfernen Sie den eingegebenen Textwert mit jQuery

Konvertieren Sie den Eingabetyp mit jQuery in ein Kennwort

<input type="text" class="remove-autofill">

$('.js-remove-autofill').val('');    
$('.js-remove-autofill').attr('type', 'password');

Funktioniert nicht in Chrome. Sobald das Feld zu type = password wird, füllt Chrome es aus
mowgli

0

Ein Update der Arjans-Lösung. Wenn Sie versuchen, die Werte zu ändern, werden Sie nicht zugelassen. Das funktioniert gut für mich. Wenn Sie sich auf eine Eingabe konzentrieren, wird diese gelb. es ist nah genug.

$(document).ready(function (){
    if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
        var id = window.setInterval(function(){
            $('input:-webkit-autofill').each(function(){
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }, 20);

        $('input:-webkit-autofill').focus(function(){window.clearInterval(id);});
    }
});

$('input:-webkit-autofill').focus(function(){window.clearInterval(id);});

0

Versuchen Sie diesen Code:

 	$(function(){
   		setTimeout(function(){
   			$('[name=user_password]').attr('type', 'password');
   		}, 1000);
   	});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<input name="user_password" type="password">


0

Fareed Namrouti Antwort ist richtig. Der Hintergrund wird jedoch immer noch gelb, wenn der Eingang ausgewählt wird . Hinzufügen !importantBeheben Sie das Problem. Wenn Sie auch textareaund selectmit dem gleichen Verhalten wollen, fügen Sie einfach hinzutextarea:-webkit-autofill, select:-webkit-autofill

Nur Eingabe

input:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}

Eingabe, Auswahl, Textbereich

input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}

0

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.

Hoffe das spart dir etwas Zeit.


0

Wenn Sie das gelbe Flackern vermeiden möchten, bis Ihr CSS angewendet wird, schlagen Sie einen Übergang auf diesen bösen Jungen wie folgt vor:

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
    transition: background-color 10s ease-in-out 0s;
}

-1

Das finale Resultat:

$(document).ready(function(){
    var contadorInterval = 0;
    if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
    {
        var _interval = window.setInterval(function ()
        {
            var autofills = $('input:-webkit-autofill');
            if (autofills.length > 0)
            {
                window.clearInterval(_interval); // stop polling
                autofills.each(function()
                {
                    var clone = $(this).clone(true, true);
                    $(this).after(clone).remove();
                    setTimeout(function(){
//                        $("#User").val('');
                        $("#Password").val('');
                    },10);
                });
            }
            contadorInterval++;
            if(contadorInterval > 50) window.clearInterval(_interval); // stop polling
        }, 20);
    }else{
        setTimeout(function(){
//            $("#User").val('');
            $("#Password").val('');
        },100);
    }
});

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

Ähnliche Frage: Link


Chrom ignoriert die automatische Vervollständigung = "aus"
Sven van den Boogaart

Automatische Vervollständigung deaktivieren in Google Chrome: <a href=" browsers.about.com/od/googlechrome/ss/...>
Aditya P Bhatt

-5

Ich fand mich gerade mit der gleichen Frage. Das funktioniert bei mir:

form :focus {
  outline: none;
}

3
Das ist der Umriss auf dem Feld, wenn Sie darauf klicken, nicht die Hintergrundfarbe der automatisch ausgefüllten Eingabe
Claire
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.