Me he encontrado con problemas con el comportamiento de autocompletado de Chrome en varios formularios.
Todos los campos en el formulario tienen nombres muy comunes y precisos, como "correo electrónico", "nombre" o "contraseña", y también se han autocomplete="off"
configurado.
El indicador de autocompletar ha deshabilitado correctamente el comportamiento de autocompletar, donde aparece un menú desplegable de valores cuando comienza a escribir, pero no ha cambiado los valores con los que Chrome rellena automáticamente los campos.
Este comportamiento estaría bien, excepto que Chrome está llenando las entradas incorrectamente, por ejemplo, llenando la entrada del teléfono con una dirección de correo electrónico. Los clientes se han quejado de esto, por lo que se verifica que está sucediendo en varios casos, y no como algún tipo de resultado de algo que he hecho localmente en mi máquina.
La única solución actual en la que puedo pensar es generar dinámicamente nombres de entrada personalizados y luego extraer los valores en el back-end, pero esto parece una forma bastante extraña de solucionar este problema. ¿Hay alguna etiqueta o peculiaridad que cambie el comportamiento de autocompletar que podría usarse para solucionar esto?
fuente
Respuestas:
Para las nuevas versiones de Chrome, solo puede poner
autocomplete="new-password"
su campo de contraseña y listo. Lo he comprobado, funciona bien.Recibí ese consejo del desarrollador de Chrome en esta discusión: https://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7
PD Tenga en cuenta que Chrome intentará inferir el comportamiento de autocompletar a partir del nombre, la identificación y cualquier contenido de texto que pueda obtener alrededor del campo, incluidas las etiquetas y los nodos de texto arbitrario. Si hay un token de autocompletar como
street-address
en contexto, Chrome lo rellenará automáticamente como tal. La heurística puede ser bastante confusa ya que a veces solo se activa si hay campos adicionales en el formulario, o no si hay muy pocos campos en el formulario. También tenga en cuenta queautocomplete="no"
parecerá funcionar peroautocomplete="off"
no por razones históricas.autocomplete="no"
¿Le está diciendo al navegador que este campo debe completarse automáticamente como un campo llamado"no"
? Si generaautocomplete
nombres aleatorios únicos , deshabilita el autocompletado.Si sus usuarios han visitado formularios incorrectos, su información de autocompletar puede estar dañada . Hacer que ingresen manualmente y corrijan su información de autocompletar en Chrome puede ser una acción necesaria de su parte.
fuente
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:
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):
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:
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, peroposition: 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"
fuente
autocomplete="I told you I wanted this off, Google. But you would not listen."
Después de meses y meses de lucha, descubrí que la solución es mucho más simple de lo que podrías imaginar:
En lugar de
autocomplete="off"
usoautocomplete="false"
;)¡Tan simple como eso, y funciona como un encanto en Google Chrome también!
Actualización de agosto de 2019 (crédito a @JonEdiger en comentarios)
Nota: mucha información en línea dice que los navegadores ahora consideran que autocompletar = 'false' es lo mismo que autocomplete = 'off'. Al menos a partir de este momento, está evitando el autocompletado para esos tres navegadores.
Configúrelo a nivel de formulario y luego, para las entradas que desea desactivar, establezca un valor no válido como 'ninguno':
fuente
A veces, incluso
autocomplete=off
no evitará rellenar credenciales en campos incorrectos.Una solución alternativa es deshabilitar la función de autocompletar del navegador mediante el modo de solo lectura y establecer el foco de escritura en foco:
El
focus
evento se produce al hacer clic con el mouse y al recorrer los campos.Actualizar:
Mobile Safari establece el cursor en el campo, pero no muestra el teclado virtual. Esta nueva solución funciona como antes, pero maneja el teclado virtual:
Demostración en vivo https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
Explicación: ¿El navegador llena automáticamente las credenciales en un campo de texto incorrecto?
A veces noto este comportamiento extraño en Chrome y Safari, cuando hay campos de contraseña en la misma forma. Supongo que el navegador busca un campo de contraseña para insertar sus credenciales guardadas. Luego, llena automáticamente el nombre de usuario en el campo de entrada de texto similar más cercano, que aparece antes del campo de contraseña en DOM (solo adivinando por observación). Como el navegador es la última instancia y no puede controlarlo,
Esta corrección de solo lectura anterior funcionó para mí.
fuente
dummy
y luego lo elimina nuevamente? Agregar y quitar solo lectura suena como un movimiento peligroso: ¿qué pasa si el navegador no quiere que te concentres en él?Si está implementando una función de cuadro de búsqueda, intente configurar el
type
atributo de lasearch
siguiente manera:Esto funciona para mí en Chrome v48 y parece ser un marcado legítimo:
https://www.w3.org/wiki/HTML/Elements/input/search
fuente
Prueba esto. Sé que la pregunta es algo antigua, pero este es un enfoque diferente para el problema.
También noté que el problema viene justo por encima del
password
campo.Probé los dos métodos como
<form autocomplete="off">
y<input autocomplete="off">
ninguno de ellos me funcionó.Así que lo arreglé usando el fragmento de abajo: simplemente agregué otro campo de texto justo arriba del campo de tipo de contraseña y lo hice
display:none
.Algo como esto:
Espero que ayude a alguien.
fuente
password
y teneractual_password
el campo legítimo, ya que Google ahora parece estar mirando elname
. Sin embargo, esto significa que Chrome no guardará la contraseña, que es la funcionalidad que realmente quiero . AAAAARRRRGHH!No sé por qué, pero esto me ayudó y funcionó.
No tengo idea de por qué, pero autocompelete = "nueva contraseña" desactiva la función de autocompletar. Funcionó en la última versión de Chrome 49.0.2623.112 .
fuente
Para mi simple
Lo hizo.
Probado en varias versiones, el último intento fue en 56.0.2924.87
fuente
Tienes que agregar este atributo:
Enlace fuente: artículo completo
fuente
Es muy simple y complicado :)
Google Chrome básicamente busca cada primer elemento de contraseña visible dentro de
<form>
,<body>
y las<iframe>
etiquetas para habilitar el relleno automático para ellos, por lo que para deshabilitar esto, debe agregar un elemento de contraseña ficticio como el siguiente:si su elemento de contraseña dentro de una
<form>
etiqueta necesita colocar el elemento ficticio como el primer elemento en su formulario inmediatamente después de<form>
abrir la etiquetasi su elemento de contraseña no está dentro de una
<form>
etiqueta, coloque el elemento ficticio como el primer elemento en su página html inmediatamente después de<body>
abrir la etiquetaNecesita ocultar el elemento ficticio sin usar css,
display:none
así que básicamente use lo siguiente como un elemento ficticio de contraseña.fuente
<form *ngIf="!loggedIn()" #loginForm="ngForm" class="navbar-form navbar-right" (ngSubmit)="login()"><input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/><input type="text" #username="ngModel" placeholder="Username" class="form-control" required autocomplete="off" name="username" [(ngModel)]="model.username"><input type="password" #password="ngModel" placeholder="Password" class="form-control" required autocomplete="off" name="password" [(ngModel)]="model.password">...
Aquí están mis soluciones propuestas, ya que Google insiste en anular todas las soluciones que las personas parecen hacer.
Opción 1: seleccione todo el texto al hacer clic
Establezca los valores de las entradas en un ejemplo para su usuario (p
[email protected]
. Ej. ), O la etiqueta del campo (pEmail
. Ej. ) Y agregue una clase llamadafocus-select
a sus entradas:Y aquí está el jQuery:
Realmente no puedo ver a Chrome jugando con los valores. Eso sería una locura. Esperemos que esta sea una solución segura.
Opción 2: establezca el valor del correo electrónico en un espacio, luego bórrelo
Suponiendo que tiene dos entradas, como correo electrónico y contraseña, establezca el valor del campo de correo electrónico en
" "
(un espacio) y agregue el atributo / valorautocomplete="off"
, luego borre esto con JavaScript. Puede dejar el valor de contraseña vacío.Si el usuario no tiene JavaScript por algún motivo, asegúrese de recortar su entrada del lado del servidor (probablemente debería estarlo de todos modos), en caso de que no elimine el espacio.
Aquí está el jQuery:
Establecí un tiempo de espera para
15
porque5
parecía funcionar ocasionalmente en mis pruebas, por lo que triplicar este número parece una apuesta segura.Si no se establece el valor inicial en un espacio, Chrome dejará la entrada en amarillo, como si se hubiera llenado automáticamente.
Opción 3 - entradas ocultas
Ponga esto al comienzo del formulario:
CSS:
¡Asegúrese de mantener la nota HTML para que sus otros desarrolladores no la eliminen! También asegúrese de que el nombre de la entrada oculta sea relevante.
fuente
Use css text-security: disco sin usar type = password .
html
css
fuente
En algunos casos, el navegador seguirá sugiriendo valores de autocompletado incluso si el atributo de autocompletar está desactivado. Este comportamiento inesperado puede ser bastante desconcertante para los desarrolladores. El truco para forzar realmente la no autocompletación es asignar una cadena aleatoria al atributo , por ejemplo:
fuente
Descubrí que agregar esto a un formulario evita que Chrome use Autocompletar.
Encontrado aquí https://code.google.com/p/chromium/issues/detail?id=468153#hc41
Realmente decepcionante que Chrome haya decidido que sabe mejor que el desarrollador cuándo completar automáticamente. Tiene una sensación real de Microsoft.
fuente
agregar el atributo de solo lectura a la etiqueta junto con el evento onfocus que lo elimina soluciona el problema
fuente
Para combinaciones de nombre de usuario y contraseña, este es un problema fácil de resolver. La heurística de Chrome busca el patrón:
seguido por:
Simplemente interrumpa este proceso invalidando esto:
fuente
La solución proporcionada por Mike Nelsons no funcionó para mí en Chrome 50.0.2661.102 m. Simplemente agregando un elemento de entrada del mismo tipo con pantalla: ninguno configurado ya no deshabilita el autocompletado del navegador nativo. Ahora es necesario duplicar el atributo de nombre del campo de entrada en el que desea deshabilitar el autocompletado.
Además, para evitar duplicar el campo de entrada cuando están dentro de un elemento de formulario, debe colocar un elemento deshabilitado en el elemento que no se muestra. Esto evitará que ese elemento se envíe como parte de la acción del formulario.
fuente
En 2016, Google Chrome comenzó a ignorar
autocomplete=off
aunque está en W3C. La respuesta que publicaron :Lo que esencialmente dice: sabemos mejor lo que un usuario quiere.
Abrieron otro error para publicar casos de uso válidos cuando se requiere autocompletar = apagado
No he visto problemas relacionados con el autocompletado en toda mi aplicación B2B, pero solo con la entrada de un tipo de contraseña.
El Autocompletar interviene si hay algún campo de contraseña en la pantalla, incluso uno oculto. Para romper esta lógica, puede poner cada campo de contraseña en su propia forma si no rompe su propia lógica de página.
fuente
autocomplete="pineapple"
o algún otro galimatías también parece solucionar el problema? Al menos, lo hizo por mi parte!Si tiene problemas para mantener los marcadores de posición pero deshabilita el autocompletado de Chrome, encontré esta solución.
Problema
HTML
http://jsfiddle.net/xmbvwfs6/1/
El ejemplo anterior todavía produce el problema de autocompletar, pero si usa el
required="required"
CSS y algo de CSS, puede replicar los marcadores de posición y Chrome no recogerá las etiquetas.Solución
HTML
CSS
http://jsfiddle.net/mwshpx1o/1/
fuente
input
foco si el usuario hace clic en el marcador de posición "falso":$("label").on("click",function(){ $(this).prev().focus(); });
Tenga en cuenta quelabel
no puede estar antes de queinput
... Chrome lo encuentre. Buena solución creativa! +1Realmente no me gustaba hacer campos ocultos, creo que hacerlo así se volverá realmente confuso muy rápido.
En los campos de entrada que desea detener la finalización automática, esto funcionará. Haga que los campos sean de solo lectura y en foco elimine ese atributo como este
lo que esto hace es que primero tiene que eliminar el atributo de solo lectura seleccionando el campo y, en ese momento, lo más probable es que se complete con su propia entrada del usuario y se detenga el autocompletado para hacerse cargo
fuente
Los valores ingresados previamente almacenados en caché por Chrome se muestran como una lista de selección desplegable. Esto se puede desactivar mediante autocompletar = desactivado, la dirección guardada explícitamente en la configuración avanzada de Chrome proporciona una ventana emergente de autocompletar cuando un campo de dirección se enfoca. Esto se puede desactivar mediante autocompletar = "false" Pero permitirá que Chrome muestre los valores en caché en el menú desplegable.
En un campo html de entrada, los siguientes apagarán ambos.
Role="presentation" & autocomplete="off"
Al seleccionar campos de entrada para el autocompletado de direcciones, Chrome ignora los campos de entrada que no tienen el elemento html de etiqueta anterior.
Para garantizar que el analizador de cromo ignore un campo de entrada para la ventana emergente de autocompletar, se puede agregar un botón oculto o control de imagen entre la etiqueta y el cuadro de texto. Esto interrumpirá la secuencia de análisis de cromo de la creación de pares de entrada de etiqueta para autocompletar. Las casillas de verificación se ignoran al analizar los campos de dirección
Chrome también considera el atributo "for" en el elemento de etiqueta. Se puede usar para romper la secuencia de análisis de cromo.
fuente
Bueno, dado que todos tenemos este problema, invertí algo de tiempo para escribir una extensión jQuery que funcione para este problema. Google tiene que seguir el marcado html, no nosotros seguimos a Google
Simplemente agregue esto a un archivo como /js/jquery.extends.js e inclúyalo más allá de jQuery. Aplíquelo a cada elemento de formulario al cargar el documento de esta manera:
jsfiddle con pruebas
fuente
Pruebe el siguiente
jQuery
código que me ha funcionado.fuente
autocomplete="off"
al campo de entrada en lugar de usar jquery. Y por cierto, esto no funciona. Las sugerencias de contraseña de Chrome siguen apareciendo.Hay dos piezas para esto. Chrome y otros navegadores recordarán los valores ingresados previamente para los nombres de campo y proporcionarán una lista de autocompletar al usuario en función de eso (en particular, las entradas de tipo de contraseña nunca se recuerdan de esta manera, por razones bastante obvias). Puede agregar
autocomplete="off"
para evitar esto en cosas como su campo de correo electrónico.Sin embargo, entonces tiene rellenos de contraseña. La mayoría de los navegadores tienen sus propias implementaciones integradas y también hay muchas utilidades de terceros que proporcionan esta funcionalidad. Esto, no puedes parar. Este es el usuario que elige guardar esta información para que se complete automáticamente más tarde, y está completamente fuera del alcance y la esfera de influencia de su aplicación.
fuente
autocomplete="off"
. Es posible que la intención sea eliminarlo, pero eso nunca se dice explícitamente, y ciertamente no hay nada que requiera ese salto mental. Es posible que solo quieran considerar formas alternativas o mejores de tratarlo. De todos modos, sigue siendo parte de la especificación, y de nuevo, tampoco hay indicios de que abandone la especificación. Y, hasta donde yo sé, todavía funciona en todos los navegadores, incluido Chrome.Según el informe de errores de Chromium # 352347, Chrome ya no respeta
autocomplete="off|false|anythingelse"
, ni en los formularios ni en las entradas.La única solución que funcionó para mí fue agregar un campo de contraseña ficticia :
fuente
Al configurar
autocomplete
aoff
debería funcionar aquí, tengo un ejemplo que utiliza Google en la página de búsqueda. Encontré esto del elemento de inspección.editar : en caso de
off
que no funcione, intentefalse
onofill
. En mi caso funciona con Chrome versión 48.0fuente
Aquí hay un truco sucio
Tiene su elemento aquí (agregando el atributo deshabilitado):
Y luego, en la parte inferior de tu página web, agrega JavaScript:
fuente
Solución diferente, basada en webkit. Como ya se mencionó, cada vez que Chrome encuentra un campo de contraseña, completa automáticamente el correo electrónico. AFAIK, esto es independientemente de autocompletar = [lo que sea].
Para evitar esto, cambie el tipo de entrada al texto y aplique la fuente de seguridad del kit web en la forma que desee.
Por lo que puedo ver, esto es al menos tan seguro como input type = password, es copiar y pegar seguro. Sin embargo, es vulnerable al eliminar el estilo que eliminará los asteriscos, por supuesto, input type = password se puede cambiar fácilmente a input type = text en la consola para revelar las contraseñas autocompletadas, por lo que es realmente lo mismo.
fuente
type="password"
ahora.La única forma que me funcionó fue: (se requiere jQuery)
fuente
Me he enfrentado al mismo problema. Y aquí está la solución para deshabilitar el nombre de usuario y la contraseña de autocompletar en Chrome (solo probado con Chrome)
fuente