Bem, um pouco tarde para a festa, mas parece que há um pouco de mal-entendido sobre como autocomplete
deve e não deve funcionar. De acordo com as especificações HTML, o agente do usuário (neste caso, Chrome) pode substituir autocomplete
:
https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
Um agente de usuário pode permitir que o usuário substitua o nome do campo de preenchimento automático de um elemento, por exemplo, altere-o de "desativado" para "ativado" para permitir que valores sejam lembrados e preenchidos apesar das objeções do autor da página ou sempre "desativados", nunca lembrando valores. No entanto, os agentes do usuário não devem permitir que os usuários substituam trivialmente o nome do campo de preenchimento automático de "desativado" para "ativado" ou outros valores, pois há implicações de segurança significativas para o usuário se todos os valores forem sempre lembrados, independentemente das preferências do site.
Portanto, no caso do Chrome, os desenvolvedores disseram essencialmente "deixaremos isso para o usuário decidir em suas preferências se ele deseja autocomplete
ou não funcionar. Se você não quiser, não ative no seu navegador" .
No entanto, parece que isso é um pouco zeloso da parte deles, mas é assim que as coisas são. A especificação também discute as implicações potenciais de segurança de tal mudança:
A palavra-chave "off" indica que os dados de entrada do controle são particularmente sensíveis (por exemplo, o código de ativação de uma arma nuclear); ou que é um valor que nunca será reutilizado (por exemplo, uma chave única para um logon bancário) e, portanto, o usuário precisará digitar os dados explicitamente a cada vez, em vez de poder contar com o UA para pré-carregar o valor para ele; ou que o documento fornece seu próprio mecanismo de preenchimento automático e não deseja que o agente do usuário forneça valores de preenchimento automático.
Então, depois de experimentar a mesma frustração que todos os outros, encontrei uma solução que funciona para mim. É semelhante na veia aoautocomplete="false"
respostas.
Um artigo da Mozilla fala exatamente sobre esse problema:
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
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
Portanto, o seguinte código deve funcionar:
autocomplete="nope"
E assim deve cada um dos seguintes:
autocomplete="false"
autocomplete="foo"
autocomplete="bar"
O problema que vejo é que o agente do navegador pode ser inteligente o suficiente para aprender o autocomplete
atributo e aplicá-lo na próxima vez em que visualizar o formulário. Se isso acontecer, a única maneira de ver ainda para resolver o problema seria mudar dinamicamente oautocomplete
valor atributo quando a página for gerada.
Um ponto que vale a pena mencionar é que muitos navegadores ignoram as autocomplete
configurações dos campos de login (nome de usuário e senha). Como o artigo da Mozilla afirma:
Por esse motivo, muitos navegadores modernos não oferecem suporte ao preenchimento automático = "desativado" nos campos de login.
- Se um site definir autocomplete = "off" para um formulário, e o formulário incluir campos de nome de usuário e senha, o navegador ainda oferecerá a lembrança desse logon e, se o usuário concordar, o navegador preencherá esses campos automaticamente na próxima vez que o usuário visita esta página.
- Se um site definir preenchimento automático = "desativado" para os campos de entrada de nome de usuário e senha, o navegador ainda oferecerá a lembrança desse logon e, se o usuário concordar, o navegador preencherá esses campos automaticamente na próxima vez que o usuário visitar esta página.
Esse é o comportamento no Firefox (desde a versão 38), no Google Chrome (desde 34) e no Internet Explorer (desde a versão 11).
Finalmente, um pouco de informação sobre se o atributo pertence ao form
elemento ou ao input
elemento. A especificação novamente tem a resposta:
Se o atributo de preenchimento automático for omitido, será utilizado o valor padrão correspondente ao estado do atributo de preenchimento automático do proprietário do formulário do elemento ("ativado" ou "desativado"). Se não houver proprietário do formulário, o valor "on" será usado.
Assim. Colocá-lo no formulário deve ser aplicado a todos os campos de entrada. Colocá-lo em um elemento individual deve ser aplicado apenas a esse elemento (mesmo se não houver um no formulário). Se autocomplete
não estiver definido, o padrão éon
.
Sumário
Para desativar autocomplete
em todo o formulário:
<form autocomplete="off" ...>
Ou se você precisar fazer isso dinamicamente:
<form autocomplete="random-string" ...>
Para desativar autocomplete
em um elemento individual (independentemente da configuração do formulário estar presente ou não)
<input autocomplete="off" ...>
Ou se você precisar fazer isso dinamicamente:
<input autocomplete="random-string" ...>
E lembre-se de que certos agentes de usuários podem substituir até as tentativas mais difíceis de desativar autocomplete
.