Ao usar o xhtml1-transitional.dtd
doctype, coletando um número de cartão de crédito com o seguinte HTML
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
sinalizará um aviso no validador do W3C:
não há atributo "preenchimento automático".
Existe uma maneira W3C / standards de desativar o preenchimento automático do navegador em campos confidenciais de um formulário?
Respostas:
Aqui está um bom artigo do MDC, que explica os problemas (e soluções) para formar o preenchimento automático. A Microsoft publicou algo semelhante aqui também.
Para ser honesto, se isso é algo importante para seus usuários, 'quebrar' os padrões dessa maneira parece apropriado. Por exemplo, a Amazon usa um pouco o atributo 'preenchimento automático' e parece funcionar bem.
Se você deseja remover completamente o aviso, use o JavaScript para aplicar o atributo aos navegadores que o suportam (IE e Firefox são os navegadores importantes) usando
someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
Por fim, se seu site estiver usando HTTPS, o IE desativará automaticamente o preenchimento automático (como outros navegadores, até onde eu saiba).
Atualizar
Como essa resposta ainda recebe alguns votos positivos, eu só queria salientar que no HTML5, você pode usar o atributo 'preenchimento automático' no elemento do formulário. Veja a documentação no W3C para isso.
fonte
autocomplete
pode ser usado não apenas noform
elemento , eoff
obras de valor pelo menos emchromium-40.0.2214.115
Eu ficaria muito surpreso se o W3C tivesse proposto uma maneira de trabalhar com o (X) HTML4. O recurso de preenchimento automático é totalmente baseado em navegador e foi introduzido nos últimos anos (muito depois da criação do padrão HTML4).
Não ficaria surpreso se o HTML5 tivesse um, no entanto.
Edit: Como eu pensei, HTML5 não tem esse recurso. Para definir sua página como HTML5, use o seguinte doctype (por exemplo: coloque isso como o primeiro texto em seu código-fonte). Observe que nem todos os navegadores suportam esse padrão, pois ele ainda está no formato de rascunho.
fonte
HTML 4 : Não
HTML 5 : Sim
Referência: W3
fonte
Não, mas o preenchimento automático do navegador geralmente é acionado pelo campo com o mesmo
name
atributo dos campos preenchidos anteriormente. Se você pudesse criar uma maneira inteligente de ter um nome de campo aleatório , o preenchimento automático não conseguiria extrair nenhum valor inserido anteriormente para o campo.Se você der um nome a um campo de entrada como "
email_<?= randomNumber() ?>
" e, em seguida, fazer com que o script que recebe esse loop de dados através das variáveis POST ou GET procurando algo que corresponda ao padrão "email_[some number]
", você pode obter isso, e isso teria ( praticamente) sucesso garantido, independentemente do navegador .fonte
Não, um bom artigo está aqui no Mozila Wiki .
Eu continuaria usando o inválido
attribute
. Eu acho que é aqui que o pragmatismo deve conquistar a validação.fonte
Que tal configurá-lo com JavaScript?
Não é perfeito, mas seu HTML será válido.
fonte
Sugiro pegar todos os 4 tipos de entrada:
Referência:
fonte
:input
tambémSe você usa jQuery, pode fazer algo assim:
e use a classe autocompleteOff onde desejar:
Se você deseja que TODAS as suas informações sejam
autocomplete=off
, você pode simplesmente usar isso:fonte
autocomplete
atributo de uma forma diferente que não seja no html$('input.autocompleteOff').val('');
que parece estar bem.Outra maneira - que também ajudará na segurança é chamar a caixa de entrada de algo diferente toda vez que você a exibe: exatamente como um captha. Dessa forma, a sessão pode ler a entrada única e o preenchimento automático não tem nada para continuar.
Apenas um ponto sobre a pergunta de rmeador sobre se você deve estar interferindo na experiência do navegador: desenvolvemos sistemas de gerenciamento de contatos e CRM e, quando você digita os dados de outras pessoas em um formulário, não deseja que ele sugira constantemente seus próprios detalhes.
Isso funciona para as nossas necessidades, mas temos o luxo de dizer aos usuários para obter um navegador decente :)
fonte
autocomplete="off"
isso deve corrigir o problema para todos os navegadores modernos.Nas versões atuais dos navegadores Gecko, o atributo de preenchimento automático funciona perfeitamente. Para versões anteriores, voltando ao Netscape 6.2, funcionava com exceção dos formulários com "Endereço" e "Nome"
Atualizar
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 o não preenchimento automático é atribuir uma sequência aleatória ao atributo , por exemplo:
Como esse valor aleatório não é a
valid one
, o navegador desistirá.Documetation
fonte
Usar um atributo 'nome' aleatório funciona para mim.
Redefino o atributo name ao enviar o formulário para que você ainda possa acessá-lo pelo nome quando o formulário for enviado. (usando o atributo id para armazenar o nome)
fonte
Observe que há alguma confusão sobre a localização do atributo de preenchimento automático. Ele pode ser aplicado à tag FORM inteira ou a tags INPUT individuais, e isso não foi padronizado antes do HTML5 (que permite explicitamente os dois locais ). Documentos mais antigos, notavelmente este artigo da Mozilla menciona apenas a tag FORM. Ao mesmo tempo, alguns scanners de segurança procuram apenas o preenchimento automático na tag INPUT e reclamam se estiver ausente (mesmo que esteja no FORM principal). Uma análise mais detalhada dessa bagunça é publicada aqui: Confusão nos atributos AUTOCOMPLETE = OFF nos formulários HTML .
fonte
Não é o ideal, mas você pode alterar o ID e o nome da caixa de texto toda vez que a renderizar - você também precisará acompanhar o servidor para poder extrair os dados.
Não tenho certeza se isso vai funcionar ou não, foi apenas um pensamento.
fonte
Eu acho que existe uma maneira mais simples. Crie uma entrada oculta com um nome aleatório (via javascript) e defina o nome de usuário para isso. Repita com a senha. Dessa forma, seu script de back-end sabe exatamente qual é o nome do campo apropriado, mantendo o preenchimento automático no escuro.
Provavelmente estou errado, mas é apenas uma ideia.
fonte
fonte
Esta solução funciona comigo:
se você deseja usar o preenchimento automático nessa região: adicione o
autocomplete="false"
elemento ex:fonte
Preenchimento automático válido desativado
fonte