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?

hsz
quelle
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;
}
Fareed Alnamrouti
quelle
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;
}
Gísli Freyr Svavarsson
quelle
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);
        });
    });
}
Alessandro Benedetti
quelle
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.

Kinlan
quelle
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.)

Jason
quelle
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

Humbads
quelle
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 .

Mailand
quelle
3

Ein bisschen hacky, funktioniert aber perfekt für mich

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
}
maximilianhp
quelle
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>
LeRoy
quelle
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);                                               


    }
});
Vertraute
quelle
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);
}
Arjan
quelle
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.

Matt Goo
quelle
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 */
Bhavesh Gangani
quelle
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.

Alex Sarnowski
quelle
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;
}
Alex
quelle
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);
    });
}
Und schlussendlich
quelle
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.

Cryss
quelle
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

i_a
quelle
0

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

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});
user3638028
quelle
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');
Ahmad Ajmi
quelle
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);});
Dustin Silk
quelle
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">

Андрій Глущенко
quelle
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;
}
Merlin
quelle
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.

Matas Vaitkevicius
quelle
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;
}
Sebastian
quelle
-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);
    }
});
Charly Novoa
quelle
-2
<input type="text" name="foo" autocomplete="off" />

Ähnliche Frage: Link

Aditya P Bhatt
quelle
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;
}

quelle
3
Das ist der Umriss auf dem Feld, wenn Sie darauf klicken, nicht die Hintergrundfarbe der automatisch ausgefüllten Eingabe
Claire