Preenchimento automático de formulários do Google Chrome e seu plano de fundo amarelo

245

Tenho um problema de design com o Google Chrome e sua função de preenchimento automático de formulário. Se o Chrome se lembrar de algum login / senha, ele muda a cor de segundo plano para amarela.

Aqui estão algumas capturas de tela:

texto alternativo texto alternativo

Como remover esse plano de fundo ou simplesmente desativar esse preenchimento automático?

hsz
fonte
4
Eu também gostaria de ver se há uma resposta para isso.
Kyle
12
Para o estilo, essa cor pode ser seriamente com elementos de design, como o contorno das tags de entrada no Chrome também. Gostaria mais de mudar a cor do que desativá-la.
Kyle
3
O Google parece reconhecer esse problema até certo ponto. Consulte code.google.com/p/chromium/issues/detail?id=46543
MitMaro
1
Para desativar o preenchimento automático, você pode adicionar autocomplete = "off" ao seu elemento de entrada, por exemplo, <input type = "text" id = "input" autocomplete = "off">
joe_young
1
Apenas uma informação adicional: fui mordido por isso quando tenho um campo de senha. Meus campos foram destacados automaticamente (em amarelo) e preenchidos com um valor estranho. E encontrei a solução aqui: zigpress.com/2014/11/22/stop-chrome-messing-forms ... A solução está na seção que diz "Desativar o preenchimento automático do Google Chrome" ... adicione campos ocultos.
Cokorda Raka

Respostas:

282

Mude "branco" para a cor que desejar.

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
}
Alnamrouti com tarifa
fonte
4
boa ideia. Eu ficaria com 50 ou 100 sempre que suficiente (caixas de entrada de tamanho normal) para evitar possíveis ocorrências de desempenho em dispositivos mais fracos. (E não há necessidade de px depois 0)
Frank Nocke
4
Amo esse hack! Ótimo pensamento ... Todo mundo está removendo o preenchimento automático. Eu queria manter o preenchimento automático apenas pegar o feio amarelo.
Travis
1
Não funciona se você tiver imagens de fundo atrás do campo de entrada, preencha toda a área com branco. Eu tentei todas as soluções nesta página, incluindo as baseadas em jquery e elas não funcionaram para mim, no final, tive que adicionar o preenchimento automático = "desativado" ao campo.
Myke Black
19
Para também o estilo do uso cor do texto -webkit-text-fill-color- veja esta questão
Erwin Wessels
2
houver erro, que eu não talvez sintaxe mudado, mas isso funciona agora:box-shadow: inset 0 0 0 1000px white !important;
Muhammad Umer
49

Se vocês desejam campos de entrada transparentes, podem usar a transição e o atraso da transição.

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
fonte
A melhor solução para mim, pois os valores de cores RGBA não funcionaram -webkit-box-shadow. Também elimina a necessidade de fornecer valores de cores para esta declaração: os valores padrão ainda serão aplicados.
Sébastien
ainda melhor é usar o atraso de transição, em vez de sua duração, que não tem mistura de cores em tudo
antoine129
bom, mas por algum motivo eu tive que mudar essa regra no final do arquivo, caso contrário, não funcionou
Igor Mizak
Foi o que eu procurei! Obrigado!
Akhmedzianov Danilian
43

Solução aqui :

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
fonte
Isso funcionou, enquanto a resposta principal não. No entanto, acho que não tentarei mudar o comportamento desde a). este é javascript, então há um segundo entre ele funciona e não (até o js carregar) eb). isso pode confundir o usuário do Chrome que está acostumado ao comportamento padrão.
TK123
3
Meu cromo apenas reaplica o amarelo para a nova entrada :(
Dustin Silk
Por favor não. Isso não funcionará com nenhuma estrutura JS, apenas para sites estáticos.
Akhmedzianov Danilian
26

No Firefox, você pode desativar todo o preenchimento automático em um formulário usando o atributo autocomplete = "off / on". Da mesma forma, itens individuais podem ser configurados usando o mesmo atributo.

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

Você pode testar isso no Chrome, pois deve funcionar.

Kinlan
fonte
7
Nos autocomplete="off"dias de hoje, a conversão não está acessível.
João
4
Infelizmente, esta solução não funciona mais no Chrome.
precisa saber é o seguinte
1
Isso é altamente recomendado, pois você não está realmente resolvendo o problema real aqui. em vez disso, você está criando um novo pelos usuários frustrantes porque têm que digitar manualmente seus (presumivelmente) detalhes de login (se eles ainda lembrar o que eram)
xorinzor
25

Se você deseja preservar o preenchimento automático, bem como quaisquer dados, manipuladores anexados e funcionalidade anexada aos seus elementos de entrada, tente este script:

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);
}

Ele pesquisa até encontrar qualquer elemento de preenchimento automático, clona-os incluindo dados e eventos, depois os insere no DOM no mesmo local e remove o original. Ele interrompe a pesquisa quando encontra clone, pois o preenchimento automático às vezes leva um segundo após o carregamento da página. Essa é uma variação de um exemplo de código anterior, mas mais robusto e mantém o máximo possível de funcionalidade intacta.

(Trabalho confirmado no Chrome, Firefox e IE 8.)

Jason
fonte
6
Esta foi a única solução que encontrei funcionando, SEM desativar o preenchimento automático.
Xeroxoid 19/09/11
talvez não seja necessário definir intervalos, pois o chrome preenche automaticamente o window.load?
Timo Huovinen
2
Funciona sem remover a solução completa automática e muito melhor do que aquelas com milhões de votos.
Ally
As outras soluções não funcionaram para mim, mesmo a mais votada, mas esta funcionou. O problema, que é o oposto do que o @Timo disse acima, é que o Chrome não preenche automaticamente no window.load. Mesmo assim, um problema é que, se não houver elementos -webkit-autofill, o loop será executado continuamente. Você nem precisa de um intervalo para que isso funcione. Basta definir um tempo limite com um atraso de 50 milissegundos e ele funcionará bem.
Gavin
16

O CSS a seguir remove a cor de fundo amarela e a substitui por uma cor de fundo de sua escolha. Ele não desabilita o preenchimento automático e não requer hacks jQuery ou Javascript.

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;
}

Solução copiada de: Substituir preenchimento de formulário do navegador e destaque de entrada com HTML / CSS

humbads
fonte
Não funciona bem se o campo tiver várias sombras aplicadas.
Streching my competence
6

Trabalhou para mim, apenas a alteração de css necessária.

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

você pode colocar qualquer cor no lugar de #ffffff .

Milão
fonte
3

Um pouco hacky, mas funciona perfeitamente para mim

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

Uma combinação de respostas funcionou para mim

<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
fonte
Este é o único exemplo que funcionou para mim com tanto texto e do fundo Chrome versão 53.0.2785.116 m
pleshy
2

Aqui está a versão MooTools do Jason's. Corrige-o no Safari também.

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);                                               


    }
});
Confidente
fonte
1
Não use esse script. Se não houver elementos preenchidos automaticamente, o loop será executado continuamente a 20 milissegundos. Um intervalo é desnecessário. Defina um tempo limite após o window.load em cerca de 50 milissegundos e isso será suficiente para remover o estilo.
Gavin
2

Isso corrige o problema no Safari e no 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
fonte
É o que funciona para mim. Mas o erro ainda está lá e, como pode ser visto, não há data a ser fixada. code.google.com/p/chromium/issues/detail?id=46543#c22
Eduardo M
Você nunca limpa seu intervalo. Este é um código desleixado, não o use.
Gavin
1
Na verdade, isso não funciona. Não consigo digitar nada nas entradas, pois elas são constantemente clonadas. quase lá ...
Dustin Silk
tente isso 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);});
Dustin Silk
2

Isso me ajudou, uma versão apenas CSS.

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

onde o branco pode ter qualquer cor que você quiser.

Matt Goo
fonte
2

Eu uso isso,

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
fonte
1

Na sua tag, basta inserir esta pequena linha de código.

autocomplete="off"

No entanto, não coloque isso no campo nome de usuário / email / idname, porque se você ainda deseja usar o preenchimento automático, ele será desativado para esse campo. Mas eu encontrei uma maneira de contornar isso, basta colocar o código na sua tag de entrada de senha, porque você nunca preenche automaticamente as senhas. Essa correção deve remover a força da cor e a capacidade de preenchimento automático do seu campo de email / nome de usuário e permite evitar hacks volumosos como Jquery ou javascript.

Alex Sarnowski
fonte
1

Se você quiser se livrar completamente dele, ajustei o código nas respostas anteriores para que funcione com foco, ativo e foco:

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
fonte
1
adicionar um !importanté necessário, mas obrigado, isso me ajudou muito.
polochon
0

Aqui está uma solução Mootools fazendo o mesmo que a de Alessandro - substitui cada entrada afetada por uma nova.

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);
    });
}
E finalmente
fonte
0

E essa solução:

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

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

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

Desativa o preenchimento automático e o preenchimento automático (para que os fundos amarelos desapareçam), aguarda 100 milissegundos e, em seguida, volta a funcionalidade de preenchimento automático sem preenchimento automático.

Se você tiver entradas que precisam ser preenchidas automaticamente, dê a elas a auto-complete-onclasse css.

Cryss
fonte
0

Nenhuma das soluções funcionou para mim, as entradas de nome de usuário e senha ainda estavam sendo preenchidas e com o fundo amarelo.

Então, perguntei-me: "Como o Chrome determina o que deve ser preenchido automaticamente em uma determinada página?"

"Procura IDs de entrada, nomes de entrada? IDs de formulário? Ação de formulário?"

Através da minha experiência com o nome de usuário e as entradas de senha, só encontrei duas maneiras que levariam o Chrome a não encontrar os campos que deveriam ser preenchidos automaticamente:

1) Coloque a senha inserida antes da entrada de texto. 2) Dê a eles o mesmo nome e identificação ... ou nenhum nome e identificação.

Após o carregamento da página, com o javascript, você pode alterar a ordem das entradas na página ou atribuir dinamicamente o nome e o ID ...

E o Chrome não sabe o que foi atingido ... o preenchimento automático permanece desativado.

Hack louco, eu sei. Mas está funcionando para mim.

Chrome 34.0.1847.116, OSX 10.7.5

I a
fonte
0

A única maneira que funciona para mim foi: (jQuery necessário)

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

Corrigi esse problema para um campo de senha que tenho assim:

Defina o tipo de entrada como texto em vez de senha

Remova o valor do texto de entrada com jQuery

Converta o tipo de entrada em senha com jQuery

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

$('.js-remove-autofill').val('');    
$('.js-remove-autofill').attr('type', 'password');
Ahmad Ajmi
fonte
Não funciona no Chrome. Assim que o campo torna-se type = senha, Chrome enche-lo em
Mowgli
0

Uma atualização para a solução Arjans. Ao tentar alterar os valores, isso não deixaria você. Este trabalho é bom para mim. Quando você focaliza uma entrada, ela fica amarela. está perto o suficiente.

$(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
fonte
0

Tente este código:

 	$(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">

Андрій Глущенко
fonte
0

resposta namrouti tarifa está correta. Mas o fundo ainda fica amarelo quando a entrada é selecionada . A adição !importantcorrige o problema. Se você quiser também textareae selectcom o mesmo comportamento basta adicionartextarea:-webkit-autofill, select:-webkit-autofill

Somente entrada

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

entrada, seleção, área de texto

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

Adicionando autocomplete="off"não vai dar certo.

Altere o atributo do tipo de entrada para type="search".
O Google não aplica preenchimento automático a entradas com um tipo de pesquisa.

Espero que isso economize algum tempo.

Matas Vaitkevicius
fonte
0

Se você deseja evitar o piscar amarelo até que seu css seja aplicado, faça uma transição nesse bad boy da seguinte maneira:

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

A solução final:

$(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
fonte
-2
<input type="text" name="foo" autocomplete="off" />

Pergunta semelhante: Link

Aditya P Bhatt
fonte
chrome ignora o autocomplete = "off" #
Sven van den Boogaart
Desativar Autocomplete no Google Chrome: <a href=" browsers.about.com/od/googlechrome/ss/...>
Aditya P Bhatt
-5

Acabei de me encontrar com a mesma pergunta. Isso funciona para mim:

form :focus {
  outline: none;
}

fonte
3
isso é o contorno na caixa quando você clica nele, não a cor de fundo da entrada autofilled
Claire