Como você desativa o preenchimento automático do navegador no campo de formulário da web / tag de entrada?

2791

Como você desativa autocompletenos principais navegadores de um input(ou form field) específico ?

Brett Veenstra
fonte
2
Em alguns sistemas em que os testadores precisam inserir manualmente muitas informações repetidamente, pode ser útil ter a opção configurável para que, ao testar, você possa desativá-la e apenas clicar em 'tab> seta para baixo> tab> seta para baixo etc. . '
Simon_Weaver 22/11/2009

Respostas:

2625

O Firefox 30 ignora as autocomplete="off"senhas, optando por solicitar ao usuário se a senha deve ser armazenada no cliente. Observe o seguinte comentário de 5 de maio de 2014:

  • O gerenciador de senhas sempre pergunta se deseja salvar uma senha. As senhas não são salvas sem a permissão do usuário.
  • Nós somos o terceiro navegador a implementar essa alteração, depois do IE e do Chrome.

De acordo com a documentação da Mozilla Developer Network , o atributo Boolean do elemento do autocompleteformulário impede que os dados do formulário sejam armazenados em cache em navegadores mais antigos.

<input type="text" name="foo" autocomplete="off" />
nlucaroni
fonte
45
Isso não funcionou para mim no Firefox 3.0.3. Eu tive que colocar o atributo de preenchimento automático no FORM e não no INPUT.
Winston Fassett 12/11/2008
17
Autocomplete só é definido nos padrões HTML 5, por isso vai quebrar qualquer validação Você corre contra HTML 4 * ....
Jrgns
96
@ Winston, você deve colocá-lo no formulário E no próprio elemento de entrada. Dessa forma, você cobre toda a não padronização dos navegadores.
AviD
83
E lembre-se de desativar o preenchimento automático = na extensão (se você estiver usando o Chrome) antes de testar seu aplicativo da web. Senão você vai se sentir muito bobo como eu. ;)
Jo Liss
314

Além disso autocomplete=off, você também pode fazer com que os nomes dos campos de formulário sejam randomizados pelo código que gera a página, talvez adicionando alguma sequência específica de sessão ao final dos nomes.

Quando o formulário é enviado, você pode retirar essa parte antes de processá-las no lado do servidor. Isso impediria que o navegador da Web encontrasse contexto para o seu campo e também ajudaria a impedir ataques XSRF, porque um invasor não seria capaz de adivinhar os nomes dos campos para o envio de um formulário.

Ben Combee
fonte
10
Esta é uma solução muito melhor em comparação ao uso do preenchimento automático = "desativado". Tudo o que você precisa fazer é gerar um novo nome em cada carregamento da página e salvar esse nome em $ _SESSION para uso futuro:$_SESSION['codefield_name'] = md5(uniqid('auth', true));
aprimore
78
Não, essa não é uma solução melhor, porque a origem da preferência por essa configuração é o agente do usuário, também conhecido como navegador da web. Há uma diferença entre dar suporte a determinado comportamento (que o HTML 5 tenta fazer) e forçá-lo ao decidir em nome do usuário, o que você sugere é uma "solução muito melhor".
amn
15
Esta solução pode funcionar com todos os navegadores, portanto, nesse sentido, é "melhor". Ainda assim, amn está correto, decidir desabilitar o preenchimento automático em nome de seus usuários não é uma boa ideia. Isso significa que eu desativaria o preenchimento automático apenas em situações muito específicas, como quando você planeja criar sua própria funcionalidade de preenchimento automático e não deseja conflitos ou comportamento estranho.
macguru2000
8
Em relação aos ataques XSRF, não tenho certeza de que tipo de ataque você estava imaginando, mas o atacante não conseguiu simplesmente retirar a parte final da mesma maneira que faz no servidor para identificar os campos? Ou, se o invasor estiver postando os campos, eles não poderão anexar sua própria sequência aleatória, pois ela será retirada pelo servidor?
Xr280xr
9
@ macguru2000 criar seu próprio preenchimento automático é um caso de uso completamente legítimo e comum. Realmente o navegador deve tornar mais fácil para os desenvolvedores para desligar autocomplete quando eles precisam, em vez de nos forçar a usar hacks como este
whoadave
235

A maioria dos principais navegadores e gerenciadores de senhas (corretamente, IMHO) agora ignoram autocomplete=off.

Por quê? Muitos bancos e outros sites de "alta segurança" foram adicionados autocomplete=offàs suas páginas de login "para fins de segurança", mas isso na verdade diminui a segurança, pois faz com que as pessoas alterem as senhas nesses sites de alta segurança para serem fáceis de lembrar (e, portanto, quebrar) desde que o preenchimento automático estava quebrado.

Há muito tempo, a maioria dos gerenciadores de senhas começou a ignorar autocomplete=offe agora os navegadores estão começando a fazer o mesmo apenas com as entradas de nome de usuário / senha.

Infelizmente, os bugs nas implementações de preenchimento automático inserem informações de nome de usuário e / ou senha em campos de formulário inadequados, causando erros de validação de formulário ou, pior ainda, inserindo acidentalmente nomes de usuários em campos que foram intencionalmente deixados em branco pelo usuário.

O que um desenvolvedor da Web deve fazer?

  • Se você pode manter todos os campos de senha em uma página por si mesmos, é um ótimo começo, pois parece que a presença de um campo de senha é o principal gatilho para o usuário / senha executar o preenchimento automático. Caso contrário, leia as dicas abaixo.
  • O Safari percebe que existem 2 campos de senha e desabilita o preenchimento automático nesse caso, supondo que seja um formulário de alteração de senha, não um formulário de login. Portanto, certifique-se de usar 2 campos de senha (novos e confirmar novos) para todos os formulários em que você permitir
  • Infelizmente, o Chrome 34 tentará preencher automaticamente os campos com user / pass sempre que vir um campo de senha. Este é um bug muito ruim que, esperançosamente, eles mudarão o comportamento do Safari. No entanto, adicionar isso à parte superior do formulário parece desativar o preenchimento automático de senha:

    <input type="text" style="display:none">
    <input type="password" style="display:none">

Ainda não investiguei o IE ou o Firefox completamente, mas será um prazer atualizar a resposta se outras pessoas tiverem informações nos comentários.

apinstein
fonte
5
o que você quer dizer com "adicionar isso à sua página parece desativar o preenchimento automático para a página:"
wutzebaer
5
@wutzebaer, o Chrome percebe o campo de senha oculta e interrompe o preenchimento automático. Alegadamente, isso evita que o site roube informações de senha sem que o usuário perceba.
David W
6
Seu snippet de código impede o preenchimento automático de campos de login no Chrome, Firefox, IE 8 e IE 10. Não testou o IE 11. Coisas boas! Apenas resposta simples que ainda funciona.
Sam Watkins
3
Sua nota de safari parece funcionar também no Chrome, pelo menos a partir de dezembro de 2015. Eu tinha um campo de nome de usuário e senha em um formulário de registro que preenchia automaticamente os dados do formulário de login. A criação de dois type='password'campos em uma página fez com que o preenchimento automático de "salvar senha" do navegador fosse ignorado, o que fazia todo o sentido, pois os formulários de registro tendem a solicitar a senha duas vezes, quando os formulários de login solicitam apenas uma vez.
Matt Fletcher
3
Parece não funcionar mais no Chrome 55, a menos que o campo extra de senha não esteja oculto, o que anula o objetivo.
Jokkedk 10/10
160

Às vezes até mesmo autocomplete = off que não impede a preencher em credenciais em campos errados, mas não do usuário ou o campo apelido.

Esta solução alternativa é uma postagem da apinstein sobre o comportamento do navegador.

corrija o preenchimento automático do navegador em somente leitura e defina o gravável em foco (clique e guia)

 <input type="password" readonly  
     onfocus="this.removeAttribute('readonly');"/>

Atualização: o Mobile Safari define o cursor no campo, mas não mostra o teclado virtual. Nova correção funciona como antes, mas lida com teclado virtual:

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />

Demonstração ao vivo https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

Como o navegador preenche automaticamente as credenciais para o campo de texto errado !?

Percebo esse comportamento estranho no Chrome e Safari, quando existem campos de senha no mesmo formulário. Eu acho que o navegador procura um campo de senha para inserir suas credenciais salvas. Em seguida, preenche automaticamente (apenas adivinhando devido à observação) o campo de entrada semelhante a texto mais próximo, que aparece antes do campo de senha no DOM. Como o navegador é a última instância e você não pode controlá-lo,

Essa correção somente de leitura acima funcionou para mim.

dsuess
fonte
8
Se não houver javascript, todo o formulário falhará. -1
Jimmy Kane
8
@JimmyKane, a chave seria também adicionar o atributo usando javascript em primeiro lugar (o que dsuess não fez aqui, mas apenas adicionando por uma questão de integridade).
trnelson
@ tmelson eu entendo, mas ainda por que usar js para desativar mesmo? Vamos evitar js para coisas que podem ser melhoradas nativamente. Mais uma vez eu concordo com você.
Jimmy Kane
3
Isso não funciona corretamente no IE8, o campo de senha somente leitura não é editável na primeira vez em que você o focaliza, somente depois de desfocar e focar novamente. Boa ideia, mas infelizmente é um pouco hacky e não é seguro de usar.
Sam Watkins
Isso não funciona corretamente em todos os navegadores (por exemplo, IE 11 e IE Edge). Assim que oreadonly é removido, a seleção subsequente do campo resulta no retorno do preenchimento automático.
Codificação Gone
106
<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

Isso funcionará no Internet Explorer e no Mozilla FireFox, mas o lado negativo é que não é padrão XHTML.

brendan
fonte
Percebi que adicioná-lo ao elemento do formulário nem sempre impede que ele seja aplicado a entradas individuais no formulário. Portanto, provavelmente é melhor colocá-lo diretamente no elemento de entrada.
Sholsinger 10/05
15
Na verdade, @sholsinger, é melhor colocar ambos no formulário E no próprio elemento de entrada. Dessa forma, você cobre toda a não padronização dos navegadores.
AviD
2
Infelizmente, a partir do IE 11, a Microsoft não respeita mais isso input type="password". Esperamos que nenhum outro navegador escolha remover essa funcionalidade.
SamHuckaby
Definir autocomplete="off"o formé a única coisa que funcionou no Chrome.
Andrew
106

A solução para o Chrome é adicionar autocomplete="new-password" à senha do tipo de entrada. Por favor, verifique o exemplo abaixo.

Exemplo:

<form name="myForm"" method="post">
   <input name="user" type="text" />
   <input name="pass" type="password" autocomplete="new-password" />
   <input type="submit">
</form>

O Chrome sempre preenche automaticamente os dados se encontrar uma caixa do tipo senha , apenas o suficiente para indicar essa caixa autocomplete = "new-password".

Isto funciona bem para mim.

Nota: verifique com F12 que suas alterações entrem em vigor, muitas vezes os navegadores salvam a página no cache, isso me deu uma má impressão de que não funcionou, mas o navegador não trouxe as alterações.

Geynen
fonte
2
Isso funciona no Chrome também para outros tipos de campos, e não apenas para type = "password".
Jake
Eu usei com senha, email e tipos de texto e funcionou. Eu usei-o simplesmente desta maneira: autocomplete = "new"
Crak_mboutin 15/01
autocomplete = "nope" name = "pswd" e usado <input name = "dummyPassword" type = "password" style = "display: none;"> antes do campo de entrada da senha real. Isso funcionou para mim.
Denuka 31/01/19
Isso funciona em quase todos os navegadores agora, não apenas no Chrome: preenchimento automático # Browser_compatibility .
Andrew Morton
60

Como outros já disseram, a resposta é autocomplete="off"

No entanto, acho que vale a pena afirmar por que é uma boa ideia usá-lo em certos casos, pois algumas respostas a ele são duplicadas perguntas sugerem que é melhor não desativá-lo.

A interrupção de navegadores que armazenam números de cartão de crédito não deve ser deixada para os usuários. Muitos usuários nem percebem que é um problema.

É particularmente importante desativá-lo nos campos dos códigos de segurança do cartão de crédito. Como esta página indica:

"Nunca guarde o código de segurança ... seu valor depende da suposição de que a única maneira de fornecê-lo é lê-lo no cartão de crédito físico, provando que a pessoa que o fornece realmente segura o cartão".

O problema é que, se for um computador público (cyber café, biblioteca etc.), é fácil para outros usuários roubar os detalhes do seu cartão e, mesmo em sua própria máquina, um site malicioso pode roubar dados de preenchimento automático .

Sam Hasler
fonte
7
se eu fosse a um site e ele lembrasse do meu cartão no menu suspenso, ficaria muito infeliz. Eu começaria a me perguntar como eles poderiam ser tão descuidados.
22410 Simon_Weaver
8
Caso muito mais simples / mais crítico. Quando visito a página de um usuário na parte administrativa do meu site, ele tenta definir seu nome de usuário e senha como meu nome de usuário e senha de administrador, sem poder dizer que este não é um formulário de login. Desejo que minha senha de administrador seja lembrada, mas é um erro crítico que tente aplicar esse nome de usuário / senha lembrado a todos os usuários que eu editar.
Rjmunro
34

Eu resolvi a luta sem fim com o Google Chrome com o uso de caracteres aleatórios. Quando você sempre processa o preenchimento automático com uma sequência aleatória, ele nunca se lembra de nada.

<input name="name" type="text" autocomplete="rutjfkde">

Espero que ajude a outras pessoas.

degrau
fonte
2
Isso funciona ainda melhor. Você pode adicionar um pequeno JS que gera um código aleatório para cada carregamento de página e adicionar esse código ao campo de entrada: <code> function autoId () {var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i <12; i ++) {autoId + = dict.charAt (Math.floor (Math.random () * dict.length)); } retornar autoId; } $ ('. autocompleteoff'). attr ('autocomplete', autoId ()); </code> Você pode adicionar a autocompleteoffclasse ao seu campo de entrada desejado.
Raghuram Kasyap
não está funcionando no meu chrome Versão 68.0.3440.106 (Compilação oficial) (64 bits)
Sukanya Purushothaman 6/18
O Chrome foi corrigido para usar o "off" padronizado agora
MacK
1
Infelizmente ele funciona melhor do que o que é chamado padrão no Chrome
Nour Lababidi
1
Hoje descobri que o Chrome substituirá a sequência aleatória por "Desativado". Não acredito que os desenvolvedores do Chrome estejam fazendo esse atributo como ruim e sem controle. Por que ohh, eu tenho.
etapa
33

Eu teria que implorar para diferir com as respostas que dizem para evitar a desativação do preenchimento automático.

A primeira coisa a destacar é que o preenchimento automático que não está explicitamente desativado nos campos do formulário de logon é uma falha do PCI-DSS. Além disso, se a máquina local de um usuário estiver comprometida, qualquer dado de preenchimento automático poderá ser obtido trivialmente por um invasor, devido ao fato de ele estar armazenado em claro.

Certamente há um argumento para a usabilidade, no entanto, há um equilíbrio muito bom quando se trata de quais campos do formulário devem ter o preenchimento automático desativado e quais não.

Securatek
fonte
Acabei de perceber que o IE não aciona eventos onChange quando você preenche uma entrada de texto usando o AutoComplete. Temos dezenas de formulários e mais de mil eventos onChange (validações de entrada, lógica de negócios) espalhados por todos eles. Recentemente, atualizamos o IE para uma versão mais recente e, de repente, coisas estranhas começaram a acontecer. Felizmente, estamos executando um aplicativo de intranet e o preenchimento automático não é um problema de UX para nós, é mais fácil desativá-lo.
precisa
3
Se a máquina local de um usuário estiver comprometida, eles serão ferrados, ponto final. Ele pode ter um keylogger instalado, um certificado raiz SSL falso e todos os itens enviados por meio de um proxy falso, etc. esse usuário meu nome de usuário e senha de administrador. Eu preciso evitar esse comportamento.
Rjmunro
1
Os fornecedores de navegadores parecem estar atentos aos seus próprios interesses. Senhas salvas = bloqueio do usuário. E a ativação / desativação do preenchimento automático era muito simples - por que não um padrão complexo de dicas semânticas ( html.spec.whatwg.org/multipage/… ) que, por sinal, permite ao navegador coletar dados semânticos valiosos dos sites cada visitas de usuários?
aro_tech
o caso de uso específico que estou tentando resolver é o seguinte: eles já estão conectados. mas agora estão prestes a acessar algo ainda mais sensível. Quero mostrar um diálogo que os faça re-autenticar, contra a possibilidade de que eles tenham saído para fumar e que uma pessoa má tenha se sentado em sua cadeira. tentei várias técnicas para derrotar o preenchimento automático e nada funciona. agora estou pensando, talvez, pelo menos, use o bom e velho 'password = window.prompt ("Digite sua senha novamente)" mais o nome de usuário na sessão e tente autenticar isso.
David
31

Três opções: Primeira:

<input type='text' autocomplete='off' />

Segundo:

<form action='' autocomplete='off'>

Terceiro (código javascript):

$('input').attr('autocomplete', 'off');
yajay
fonte
2
A primeira e a segunda opções devem ser uma opção, pois varia de acordo com a maneira como os navegadores lidam com isso.
rybo111
Tentei $ formElement.attr ('preenchimento automático', 'desativado'); e isso não funciona.
Ben Sinclair
22

Em um relacionado ou, na verdade, na nota completamente oposta -

"Se você é o usuário do formulário mencionado acima e deseja reativar a funcionalidade de preenchimento automático, use o bookmarklet 'lembrar senha' nesta página de bookmarklets . Ele remove todos os autocomplete="off"atributos de todos os formulários da página. Continue lutando pela boa luta! "

Antti Kissaniemi
fonte
20

Na verdade, usamos a ideia de sasb para um site. Era um aplicativo da web de software médico para administrar um consultório médico. No entanto, muitos de nossos clientes eram cirurgiões que usavam muitas estações de trabalho diferentes, incluindo terminais semi-públicos. Portanto, eles queriam ter certeza de que um médico que não entende as implicações das senhas salvas automaticamente ou não está prestando atenção não pode acidentalmente deixar suas informações de login facilmente acessíveis. Obviamente, isso foi antes da idéia de navegação privada que está começando a aparecer no IE8, FF3.1, etc. Mesmo assim, muitos médicos são obrigados a usar navegadores da velha escola em hospitais com TI que não mudam.

Portanto, tivemos a página de login para gerar nomes de campos aleatórios que funcionariam apenas para essa postagem. Sim, é menos conveniente, mas é apenas um incômodo para o usuário sobre o armazenamento de informações de login em terminais públicos.

Jon Adams
fonte
20

Nenhuma das soluções funcionou para mim nesta conversa.

Finalmente, descobri uma solução HTML pura que não requer Javascript , funciona em navegadores modernos (exceto o IE; havia pelo menos 1 captura, certo?) E não exige que você desabilite o preenchimento automático para todo o formulário.

Simplesmente desative o preenchimento automático forme, em seguida, ligue-o para qualquer um inputque desejar que ele funcione no formulário. Por exemplo:

<form autocomplete="off">
    <!-- these inputs will not allow autocomplete and chrome 
         won't highlight them yellow! -->
    <input name="username"  />
    <input name="password" type="password" />
    <!-- this field will allow autocomplete to work even 
         though we've disabled it on the form -->
    <input name="another_field" autocomplete="on" />
</form>
lifo
fonte
Isso era totalmente o que eu estava procurando!
Marco
20

Basta definir autocomplete="off". Há uma boa razão para fazer isso: você deseja fornecer sua própria funcionalidade de preenchimento automático!

EndangeredMassa
fonte
20

Eu tenho tentado soluções infinitas, e então eu encontrei isto:

Em vez de autocomplete="off"simplesmente usarautocomplete="false"

Tão simples como isso e funciona como um encanto no Google Chrome também!

Kaszoni Ferencz
fonte
Como você disse no chrome, o valor off não funciona. Ele precisa ser "false"
azuax
Funciona para mim no Chrome 44.0.2403.130.
GuiGS
1
Tentei isso: $ formElement.attr ('autocomplete', 'false'); desculpe não funciona.
Ben Sinclair
20

Isso funciona para mim.

<input name="pass" type="password" autocomplete="new-password" />

Também podemos usar essa estratégia em outros controles, como texto, seleção etc.

Muhammad Awais
fonte
essa deve ser a resposta mais recente. a única resposta que funciona para mim no último cromo
Nick Chan Abdullah
19

Eu acho que autocomplete=offé suportado no HTML 5.

No entanto, pergunte a si mesmo por que deseja fazer isso - pode fazer sentido em algumas situações, mas não faça isso apenas para fazê-lo.

É menos conveniente para os usuários e nem mesmo um problema de segurança no OS X (mencionado por Soren abaixo). Se você está preocupado com as pessoas que roubam suas senhas remotamente - um registrador de pressionamento de tecla ainda pode fazer isso, mesmo que seu aplicativo use autcomplete=off.

Como um usuário que escolhe um navegador para lembrar (a maioria) das minhas informações, eu consideraria irritante se o seu site não se lembrasse das minhas.

user631300
fonte
17

Além de

autocomplete="off"

Usar

readonly onfocus="this.removeAttribute('readonly');"

para as entradas que você não quer que eles se lembrem de dados do formulário ( username, password, etc.) como mostrado abaixo:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

Espero que isto ajude.

Murat Yıldız
fonte
1
Para mim no IE11, não consigo digitar na caixa de texto mesmo depois que o onfocus remove o atributo somente leitura. No entanto, se eu clicar uma segunda vez na caixa de texto, posso digitar.
mcallahan
Corri para o mesmo problema com o IE11 (não é possível digitar até o segundo foco). Adicionar um desfoque e depois focar novamente funciona. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
22818 palmsey
@ Andrew Claro, você pode. Este é o princípio principal para superar esse problema e também adicionei uma atualização que contém um exemplo de código completo;) #
Murat Yıldız
Eu também adicioneionfocusout="this.setAttribute('readonly', 'readonly');"
rinatdobr 21/06/19
16

A melhor solução:

Impedir nome de usuário (ou email) e senha de preenchimento automático:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

Impedir o preenchimento automático de um campo:

<input type="text" name="field" autocomplete="nope">

Explicação: autocompletecontinua trabalhando em <input>, autocomplete="off"não funciona, mas você pode alterar offpara uma sequência aleatória, como nope.

Trabalha em:

  • Chrome: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 e 64

  • Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 e 58

cava
fonte
2
Eu achei que isso funcionava nos meus testes preliminares. Tão estranho que "desligado" não funciona.
27618 Craig Jobs
Isso não funciona no Chrome no Android. Tentei definir valores de sequência para o autocompleteatributo e ele ainda exibe entradas anteriores como sugestões de preenchimento automático na entrada.
tebs1200
@ tebs1200 Qual deles? O campo da senha ou o campo de texto?
Cava
@Cava desculpe pela resposta atrasada. O campo de texto. Não importa qual valor eu defino autocomplete, ainda recebo uma lista suspensa de sugestões com base nos valores inseridos anteriormente. É bom no desktop, mas não no Android chrome.
precisa saber é o seguinte
14

Um pouco atrasado para o jogo ... mas acabei de encontrar este problema e tentei várias falhas, mas este funciona para mim, encontrado no MDN

Em alguns casos, o navegador continuará sugerindo valores de preenchimento automático, mesmo se o atributo de preenchimento automático estiver desativado. Esse comportamento inesperado pode ser bastante intrigante para os desenvolvedores. O truque para realmente forçar a não conclusão é atribuir uma sequência aleatória ao atributo da seguinte maneira:

autocomplete="nope"
AAH-Shoot
fonte
13

Adicionando o

autocomplete="off"

para a tag do formulário desativará o preenchimento automático do navegador (o que foi digitado anteriormente nesse campo) de todos input campos desse formulário específico.

Testado em:

  • Firefox 3.5, 4 BETA
  • Internet Explorer 8
  • cromada
Cerquilha
fonte
13

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.

Matas Vaitkevicius
fonte
4
É um truque. O campo não é um campo de pesquisa. No futuro, isso pode causar problemas.
Roel
12

Use um nome e um ID não padrão para os campos, portanto, em vez de "nome" ter "nome_". Os navegadores não o verão como o campo de nome. A melhor parte é que você pode fazer isso em alguns, mas não em todos os campos, e ele preencherá automaticamente alguns, mas nem todos os campos.

Teifion
fonte
O problema é que, se outros sites usam "nome_" para atingir o mesmo objetivo, você volta à estaca zero.
ConroyP 20/10/08
3
então faça "mysite_name". Se alguém está usando isso, eu gostaria de pedir-lhes perguntas ...
Steve Perks
este mexe-se alguns desses utilitários Preenchendo automáticas
Simon_Weaver
12

Para evitar o XHTML inválido, você pode definir esse atributo usando javascript. Exemplo usando jQuery:

<input type="text" class="noAutoComplete" ... />

$(function() {
    $('.noAutoComplete').attr('autocomplete', 'off');
});

O problema é que os usuários sem javascript obtêm a funcionalidade de preenchimento automático.

cherouvim
fonte
38
isso não evita xhtml inválido, ele simplesmente adiciona o bit inválido dinamicamente depois que você o verifica, declarando que é válido!
Andiih
@Andiih: Então, existe uma maneira de fazer o preenchimento automático funcionar em xhtml?
cherouvim
1
Trabalhe (ou pare de funcionar qual é o objetivo): sim, como acima. Mas válido - não.
Andiih
11

tente isso também se simplesmente autocomplete="off"não funcionar:

autocorrect="off" autocapitalize="off" autocomplete="off"
jeff
fonte
11

Não acredito que esse ainda seja um problema muito tempo depois de ter sido relatado. As soluções acima não funcionaram para mim, pois o safari parecia saber quando o elemento não era exibido ou fora da tela, mas o seguinte funcionou para mim:

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

Espero que seja útil para alguém!

Ben
fonte
1
então, colocar isso antes dos campos reais de nome de usuário e senha funcionou? o navegador cheio desses e não os reais
Andrew
11

Então aqui está:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">

Stav Bodik
fonte
1
Parece uma boa ideia criar caixas de texto com estilo para impedir o flash da senha visível.
Andrew
1
Muito obrigado, isso fez o trabalho +1, minha variação na sua solução foi torná-lo por uma única linha: <input oninput = "this.type = 'password'" id = "inputpassword" type = "text">
Hasnaa Ibraheem
@HasnaaIbraheem Obrigado (: às vezes mais legível é melhor.)
Stav Bodik
11

Esse é um problema de segurança que os navegadores ignoram agora. Os navegadores identificam e armazenam conteúdo usando nomes de entrada, mesmo que os desenvolvedores considerem as informações confidenciais e não devam ser armazenadas. Tornar um nome de entrada diferente entre 2 solicitações resolverá o problema (mas ainda será salvo no cache do navegador e também aumentará o cache do navegador). Pedir ao usuário para ativar ou desativar opções nas configurações do navegador não é uma boa solução. O problema pode ser corrigido no back-end.

Aqui está a minha correção. Uma abordagem que eu implementei na minha estrutura. Todos os elementos de preenchimento automático são gerados com uma entrada oculta como esta:

<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
    <input type="text" name="<? echo $r; ?>" />
    <input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
    <input type="submit" name="submit" value="submit" />
</form>

O servidor processa variáveis ​​de postagem como esta:

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

O valor pode ser acessado como de costume

var_dump($_POST['username']);

E o navegador não poderá sugerir informações da solicitação anterior ou de usuários anteriores.

Tudo funciona como um encanto, mesmo que os navegadores atualizem, desejam ignorar o preenchimento automático ou não. Essa foi a melhor maneira de corrigir o problema para mim.

Simmoniz
fonte
10

Nenhum dos hacks mencionados aqui funcionou para mim no Chrome. Há uma discussão sobre o problema aqui: https://code.google.com/p/chromium/issues/detail?id=468153#c41

Adicionando isso dentro de um <form>trabalho (pelo menos por enquanto):

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>
Jakob Løkke Madsen
fonte
1
Observe que, usando essa técnica, o FireFox ainda preencherá automaticamente esse campo oculto, que será incluído ao enviar o formulário. Isso provavelmente seria ruim, pois a senha seria transferida por uma conexão potencialmente não segura. Felizmente, a adição maxlength="0"evita que o Firefox preencha automaticamente o campo.
Mikal Schacht Jensen
9

Você pode usar na entrada.

Por exemplo;

<input type=text name="test" autocomplete="off" />
xxxxx
fonte