Bueno, un poco tarde para la fiesta, pero parece que hay un pequeño malentendido sobre cómo autocomplete
debería y no debería funcionar. De acuerdo con las especificaciones HTML, el agente de usuario (en este caso Chrome) puede anular autocomplete
:
https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
Un agente de usuario puede permitirle anular el nombre del campo de autocompletar de un elemento, por ejemplo, cambiarlo de "desactivado" a "activado" para permitir que los valores se recuerden y se completen previamente a pesar de las objeciones del autor de la página, o siempre "desactivado", sin recordar nunca valores. Sin embargo, los agentes de usuario no deben permitir que los usuarios anulen trivialmente el nombre del campo de autocompletar de "desactivado" a "activado" u otros valores, ya que existen implicaciones de seguridad significativas para el usuario si todos los valores se recuerdan siempre, independientemente de las preferencias del sitio.
Entonces, en el caso de Chrome, los desarrolladores esencialmente han dicho "dejaremos esto al usuario para que decida en sus preferencias si quiere autocomplete
trabajar o no. Si no lo quiere, no lo habilite en su navegador" .
Sin embargo, parece que esto es un poco entusiasta de su parte para mi gusto, pero es así. La especificación también analiza las posibles implicaciones de seguridad de tal movimiento:
La palabra clave "off" indica que los datos de entrada del control son particularmente sensibles (por ejemplo, el código de activación para un arma nuclear); o que es un valor que nunca se reutilizará (por ejemplo, una clave única para un inicio de sesión bancario) y, por lo tanto, el usuario tendrá que ingresar explícitamente los datos cada vez, en lugar de poder confiar en el UA para completar previamente el valor para él; o que el documento proporciona su propio mecanismo de autocompletado y no desea que el agente de usuario proporcione valores de autocompletado.
Entonces, después de experimentar la misma frustración que todos los demás, encontré una solución que funciona para mí. Es similar en vena a las autocomplete="false"
respuestas.
Un artículo de Mozilla habla exactamente de este problema:
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
En algunos casos, el navegador seguirá sugiriendo valores de autocompletado incluso si el atributo autocompletar está desactivado. Este comportamiento inesperado puede ser bastante desconcertante para los desarrolladores. El truco para forzar realmente la no terminación es asignar una cadena aleatoria al atributo
Entonces, el siguiente código debería funcionar:
autocomplete="nope"
Y así debería cada uno de los siguientes:
autocomplete="false"
autocomplete="foo"
autocomplete="bar"
El problema que veo es que el agente del navegador puede ser lo suficientemente inteligente como para aprender el autocomplete
atributo y aplicarlo la próxima vez que vea el formulario. Si lo hace, la única forma en que puedo ver para solucionar el problema sería cambiar dinámicamente el autocomplete
valor del atributo cuando se genera la página.
Un punto que vale la pena mencionar es que muchos navegadores ignorarán la autocomplete
configuración de los campos de inicio de sesión (nombre de usuario y contraseña). Como dice el artículo de Mozilla:
Por esta razón, muchos navegadores modernos no admiten autocompletar = "off" para los campos de inicio de sesión.
- Si un sitio establece autocomplete = "off" para un formulario, y el formulario incluye campos de ingreso de nombre de usuario y contraseña, entonces el navegador aún ofrecerá recordar este inicio de sesión, y si el usuario está de acuerdo, el navegador completará automáticamente esos campos la próxima vez que el El usuario visita esta página.
- Si un sitio establece autocomplete = "off" para los campos de ingreso de nombre de usuario y contraseña, entonces el navegador aún ofrecerá recordar este inicio de sesión, y si el usuario está de acuerdo, el navegador completará automáticamente esos campos la próxima vez que visite esta página.
Este es el comportamiento en Firefox (desde la versión 38), Google Chrome (desde la 34) e Internet Explorer (desde la versión 11).
Finalmente, una pequeña información sobre si el atributo pertenece al form
elemento o al input
elemento. La especificación nuevamente tiene la respuesta:
Si se omite el atributo de autocompletar, en su lugar se usa el valor predeterminado correspondiente al estado del atributo de autocompletar del propietario del formulario del elemento ("activado" o "desactivado"). Si no hay un propietario del formulario, se usa el valor "on".
Entonces. Ponerlo en el formulario debe aplicarse a todos los campos de entrada. Ponerlo en un elemento individual debe aplicarse solo a ese elemento (incluso si no hay uno en el formulario). Si autocomplete
no está configurado en absoluto, su valor predeterminado es on
.
Resumen
Para deshabilitar autocomplete
en todo el formulario:
<form autocomplete="off" ...>
O si necesita hacerlo dinámicamente:
<form autocomplete="random-string" ...>
Para deshabilitar autocomplete
en un elemento individual (independientemente de que la configuración del formulario esté presente o no)
<input autocomplete="off" ...>
O si necesita hacerlo dinámicamente:
<input autocomplete="random-string" ...>
Y recuerde que ciertos agentes de usuario pueden anular incluso sus intentos más difíciles de deshabilitar autocomplete
.