Acabo de descubrir que si tiene un nombre de usuario y contraseña recordados para un sitio, la versión actual de Chrome completará automáticamente su nombre de usuario / dirección de correo electrónico en el campo antes de cualquier type=password
campo. No le importa cómo se llame el campo, solo asume el campo antes de que la contraseña sea su nombre de usuario.
Antigua solución
Simplemente use <form autocomplete="off">
y evita que la contraseña se complete previamente, así como cualquier tipo de relleno heurístico de campos en función de los supuestos que puede hacer un navegador (que a menudo son incorrectos). A diferencia del uso <input autocomplete="off">
que parece ser ignorado por la contraseña de autocompletar (en Chrome, Firefox lo obedece).
Solución actualizada
Chrome ahora ignora <form autocomplete="off">
. Por lo tanto, mi solución original (que había eliminado) ahora está de moda.
Simplemente crea un par de campos y hazlos ocultos con "display: none". Ejemplo:
<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>
Luego ponga sus campos reales debajo.
Recuerde agregar el comentario u otras personas en su equipo se preguntarán qué está haciendo.
Actualización de marzo de 2016
Acabo de probar con el último Chrome, todo bien. Esta es una respuesta bastante antigua ahora, pero solo quiero mencionar que nuestro equipo la ha estado utilizando durante años en docenas de proyectos. Todavía funciona muy bien a pesar de algunos comentarios a continuación. No hay problemas con la accesibilidad porque los campos display:none
significan que no se enfocan. Como mencioné, debe ponerlos antes de sus campos reales.
Si está utilizando JavaScript para modificar su formulario, necesitará un truco adicional. Muestre los campos falsos mientras manipula el formulario y luego vuelva a ocultarlos un milisegundo más tarde.
Código de ejemplo usando jQuery (suponiendo que le dé una clase a sus campos falsos):
$(".fake-autofill-fields").show();
// some DOM manipulation/ajax here
window.setTimeout(function () {
$(".fake-autofill-fields").hide();
},1);
Actualización de julio de 2018
Mi solución ya no funciona tan bien ya que los expertos en anti-usabilidad de Chrome han trabajado duro. Pero nos han arrojado un hueso en forma de:
<input type="password" name="whatever" autocomplete="new-password" />
Esto funciona y principalmente resuelve el problema.
Sin embargo, no funciona cuando no tiene un campo de contraseña, sino solo una dirección de correo electrónico. Eso también puede ser difícil para que deje de ponerse amarillo y se llene previamente. La solución de campos falsos se puede utilizar para solucionar esto.
De hecho, a veces necesitas colocar dos lotes de campos falsos y probarlos en diferentes lugares. Por ejemplo, ya tenía campos falsos al comienzo de mi formulario, pero Chrome recientemente comenzó a rellenar mi campo 'Correo electrónico' nuevamente, así que dupliqué y puse más campos falsos justo antes del campo 'Correo electrónico', y eso lo solucionó . Al eliminar el primer o segundo lote de los campos, se vuelve a un llenado automático excesivamente celoso incorrecto.
Actualización mar 2020
No está claro si y cuándo esta solución aún funciona. Parece que todavía funciona a veces, pero no todo el tiempo.
En los comentarios a continuación encontrará algunas sugerencias. Uno que acaba de agregar @anilyeni puede valer más investigación:
Como noté, autocomplete="off"
funciona en Chrome 80, SI hay menos de 3 elementos <form>
. No sé cuál es la lógica o dónde está la documentación relacionada al respecto.
También este de @dubrox puede ser relevante, aunque no lo he probado:
muchas gracias por el truco, pero actualice la respuesta, ya que display:none;
ya no funciona, pero position: fixed;top:-100px;left:-100px; width:5px;
sí :)
Actualización ABRIL 2020
El valor especial para Chrome para este atributo está haciendo el trabajo: (probado en la entrada, pero no por mí)
autocomplete="chrome-off"