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?


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

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

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

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.


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


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


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 .


3

Um pouco hacky, mas funciona perfeitamente para mim

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

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>

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


    }
});

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

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


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 */

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.


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

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

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.


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


0

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

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

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

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

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


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

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.


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

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


-5

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

form :focus {
  outline: none;
}

3
isso é o contorno na caixa quando você clica nele, não a cor de fundo da entrada autofilled
Claire
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.