¿Cómo se deshabilita el autocompletado del navegador en el campo de formulario web / etiquetas de entrada?

3014

¿Cómo se desactiva la función de autocompletar en los principales navegadores para una entrada específica (o campo de formulario)?

2
  • 5
    En algunos sistemas donde los probadores tienen que ingresar manualmente mucha información una y otra vez, puede ser útil tener la opción como configurable para que al realizar la prueba pueda deshabilitarla y simplemente presionar 'tab> flecha hacia abajo> tab> flecha hacia abajo, etc. . 22 de nov. De 2009 a las 5:15
  • Pruebe github.com/terrylinooo/disableautofill.js , utiliza JavaScript para omitir la función de autocompletar del navegador. 25 de feb a las 8:50
2781

Firefox 30 ignora las autocomplete="off"contraseñas y opta por preguntar al usuario si la contraseña debe almacenarse en el cliente. Tenga en cuenta el siguiente comentario del 5 de mayo de 2014:

  • The password manager always prompts if it wants to save a password. Passwords are not saved without permission from the user.
  • We are the third browser to implement this change, after IE and Chrome.

De acuerdo con la documentación de Mozilla Developer Network , el atributo de elemento de formulario booleano autocompleteevita que los datos del formulario se almacenen en caché en navegadores más antiguos.

<input type="text" name="foo" autocomplete="off" />
4
  • 50
    Esto no funcionó para mí en Firefox 3.0.3 Tuve que poner el atributo de autocompletar en FORM en lugar de INPUT. 12 de nov. De 2008 a las 4:11
  • 20
    El autocompletado solo está definido en los estándares HTML 5, por lo que romperá cualquier validación que ejecute contra HTML 4. * ...
    Jrgns
    19 de ene. De 2009 a las 8:04
  • 106
    @Winston, debe ponerlo tanto en el formulario como en el elemento de entrada en sí. De esa forma, cubrirá toda la falta de estándares de los navegadores.
    AviD
    13/12/10 a las 12:11
  • 89
    Y recuerde deshabilitar su extensión autocomplete = on (si está usando Chrome) antes de probar su aplicación web. De lo contrario, te sentirás realmente tonto como yo. ;)
    Jo Liss
    26 feb 2011 a las 0:57
352

Además de la configuración autocomplete=off, también puede hacer que los nombres de los campos de su formulario sean aleatorios por el código que genera la página, tal vez agregando alguna cadena específica de la sesión al final de los nombres.

Cuando se envía el formulario, puede quitar esa parte antes de procesarlos en el lado del servidor. Esto evitaría que el navegador web encuentre contexto para su campo y también podría ayudar a prevenir ataques XSRF porque un atacante no podría adivinar los nombres de los campos para el envío de un formulario.

6
  • 13
    Esta es una solución mucho mejor en comparación con el uso de autocomplete = "off". Todo lo que tiene que hacer es generar un nuevo nombre en cada carga de página y guardar ese nombre en $ _SESSION para uso futuro:$_SESSION['codefield_name'] = md5(uniqid('auth', true)); 13/11/11 a las 9:03
  • 89
    No, esta no es una mejor solución, porque el origen de preferencia para esta configuración es el agente de usuario, también conocido como navegador web. Hay una diferencia entre admitir cierto comportamiento (lo que HTML 5 intenta hacer) y forzarlo decidiendo en nombre del usuario, lo que sugiere que es una "solución mucho mejor".
    amn
    27 de mayo de 2013 a las 17:09
  • 18
    Esta solución puede funcionar con todos los navegadores, por lo que en ese sentido es "mejor". Aún así, amn tiene razón, decidir deshabilitar la función de autocompletar en nombre de sus usuarios no es una buena idea. Esto significa que solo deshabilitaría el autocompletado en situaciones muy específicas, como cuando planea crear su propia funcionalidad de autocompletar y no desea conflictos o comportamientos extraños. 15 de mayo de 2014 a las 21:34
  • 10
    Con respecto a los ataques XSRF, no estoy seguro de qué tipo de ataque estaba imaginando, pero ¿no podría el atacante simplemente quitar la parte final de la misma manera que lo hace en el lado del servidor para identificar los campos? O si el atacante está publicando los campos, ¿no podría agregar su propia cadena aleatoria, ya que el servidor la eliminará?
    xr280xr
    11 feb.15 a las 20:10
  • 12
    @ macguru2000 La construcción de su propio autocompletado es un caso de uso común y completamente legítimo. Realmente, el navegador debería facilitar que los desarrolladores desactiven el autocompletado cuando lo necesiten en lugar de obligarnos a usar hacks como este. 6 de mayo de 2015 a las 2:01
258

La mayoría de los principales navegadores y administradores de contraseñas (correctamente, en mi humilde opinión) ahora ignoran autocomplete=off.

¿Por qué? Muchos bancos y otros sitios web de "alta seguridad" agregaron autocomplete=offa sus páginas de inicio de sesión "por motivos de seguridad", pero esto en realidad disminuye la seguridad, ya que hace que las personas cambien las contraseñas en estos sitios de alta seguridad para que sean fáciles de recordar (y, por lo tanto, descifrar) desde el autocompletado. estaba rota.

Hace mucho tiempo, la mayoría de los administradores de contraseñas comenzaron a ignorar autocomplete=off, y ahora los navegadores están comenzando a hacer lo mismo solo para las entradas de nombre de usuario / contraseña.

Desafortunadamente, los errores en las implementaciones de autocompletar insertan información de nombre de usuario y / o contraseña en campos de formulario inapropiados, lo que causa errores de validación de formulario o, peor aún, inserta accidentalmente nombres de usuario en campos que el usuario dejó en blanco intencionalmente.

¿Qué debe hacer un desarrollador web?

  • Si puede mantener todos los campos de contraseña en una página por sí mismos, es un gran comienzo, ya que parece que la presencia de un campo de contraseña es el desencadenante principal para que se active el autocompletado de usuario / contraseña. De lo contrario, lea los consejos a continuación.
  • Safari nota que hay 2 campos de contraseña y deshabilita el autocompletado en este caso, asumiendo que debe ser un formulario de cambio de contraseña, no un formulario de inicio de sesión. Así que asegúrese de usar 2 campos de contraseña (nuevo y confirmar nuevo) para cualquier formulario donde lo permita
  • Chrome 34, desafortunadamente, intentará completar automáticamente los campos con usuario / contraseña cada vez que vea un campo de contraseña. Este es un error bastante grave que, con suerte, cambiará el comportamiento de Safari. Sin embargo, agregar esto en la parte superior de su formulario parece deshabilitar el autocompletado de contraseña:

    <input type="text" style="display:none">
    <input type="password" style="display:none">
    

Todavía no he investigado IE o Firefox a fondo, pero estaré encantado de actualizar la respuesta si otros tienen información en los comentarios.

4
  • 7
    ¿Qué quieres decir con "agregar esto en tu página parece deshabilitar el autocompletar para la página?" 7 de mayo de 2014 a las 10:31
  • 6
    @wutzebaer, Chrome detecta el campo de contraseña oculta y detiene la función de autocompletar. Según se informa, esto es para evitar que el sitio robe la información de la contraseña sin que el usuario se dé cuenta.
    David W
    1 dic 14 a las 23:05
  • 7
    Su fragmento de código evita que se completen automáticamente los campos de inicio de sesión en Chrome, Firefox, IE 8 e IE 10. No probé IE 11. ¡Muy bien! Única respuesta simple que todavía funciona. 19 de mayo de 2015 a las 4:44
  • Solo esto funcionó para mí.
    Tayyab
    16 de agosto a las 12:52
175

A veces incluso autocomplete = off que no impide llenar de credenciales en los campos incorrectos, pero no un campo de usuario o apodo.

Esta solución alternativa se suma a la publicación de apinstein sobre el comportamiento del navegador.

Corrija el autocompletado del navegador en solo lectura y establezca la escritura en el foco (haga clic y tab)

 <input type="password" readonly
     onfocus="this.removeAttribute('readonly');"/>

Actualizar:

Mobile Safari coloca el cursor en el campo, pero no muestra el teclado virtual. La nueva solución funciona como antes, pero maneja el teclado virtual:

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />

Demostración en vivo https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

¿¡Porque el navegador llena automáticamente las credenciales en un campo de texto incorrecto !?

Noto este comportamiento extraño en Chrome y Safari, cuando hay campos de contraseña en el mismo formulario. Supongo que el navegador busca un campo de contraseña para insertar sus credenciales guardadas. Luego, llena automáticamente (solo adivinando debido a la observación) el campo de entrada de texto similar al texto más cercano, que aparece antes del campo de contraseña en el DOM. Como el navegador es la última instancia y no puedes controlarlo.

Esta corrección de solo lectura anterior funcionó para mí.

3
  • 8
    Y si no hay javascript, todo el formulario falla. -1 10/07/2014 a las 10:56
  • 8
    @JimmyKane, la clave sería agregar también el atributo usando javascript en primer lugar (lo que dsuess no ha hecho aquí, pero solo agregando para completar). 27/03/15 a las 17:58
  • @tmelson, lo entiendo, pero aún así, ¿por qué usar js incluso para deshabilitar? Evitemos js para cosas que se pueden mejorar de forma nativa. Sin embargo, de nuevo estoy de acuerdo contigo. 27/03/15 a las 20:29
151

La solución para Chrome es agregar autocomplete="new-password"la contraseña del tipo de entrada. Por favor, consulte el siguiente ejemplo.

Ejemplo:

<form name="myForm"" method="post">
   <input name="user" type="text" />
   <input name="pass" type="password" autocomplete="new-password" />
   <input type="submit">
</form>

Chrome siempre autocompleta los datos si encuentra un cuadro de tipo contraseña , lo suficiente como para indicar ese cuadro autocomplete = "new-password".

This works well for me.

Nota: asegúrese de F12que sus cambios surtan efecto. Muchas veces, los navegadores guardan la página en la caché, y esto me dio la mala impresión de que no funcionaba, pero el navegador en realidad no trajo los cambios.

8
  • 4
    Esto también funciona en Chrome para otros tipos de campos, no solo para tipo = "contraseña".
    Jake
    14 dic 2017 a las 22:04
  • Lo usé con contraseña, correo electrónico y tipos de texto y funcionó. Lo usé simplemente así: autocomplete = "nuevo" 15 de enero de 2018 a las 21:02
  • autocomplete = "nope" name = "pswd" y usó <input name = "dummyPassword" type = "password" style = "display: none;"> antes del campo de entrada de contraseña real. Esto funcionó para mí.
    Denuka
    31/01/19 a las 18:51
  • 1
    Esto funciona en casi todos los navegadores ahora, no solo en Chrome: autocompletar # Browser_compatibility . 7 abr.20 a las 10:38
  • 2
    Esta es la mejor respuesta a partir de ahora. Consulte el final de esta página para obtener más información: developer.mozilla.org/en-US/docs/Web/Security/… 19 de mayo de 2020 y 20:15
110
<form name="form1" id="form1" method="post"
      autocomplete="off" action="http://www.example.com/form.cgi">

Esto funcionará en Internet Explorer y Mozilla Firefox. La desventaja es que no es estándar XHTML.

4
  • Me he dado cuenta de que agregarlo al elemento del formulario no siempre evita que se aplique a las entradas individuales dentro del formulario. Por lo tanto, probablemente sea mejor colocarlo directamente en el elemento de entrada. 10 de mayo de 2010 a las 16:48
  • dieciséis
    En realidad, @sholsinger, es mejor ponerlo tanto en el formulario como en el elemento de entrada en sí. De esa forma, cubrirá toda la falta de estándares de los navegadores.
    AviD
    13/12/10 a las 12:11
  • 2
    Lamentablemente, a partir de IE 11, Microsoft ya no respeta esto input type="password". Es de esperar que ningún otro navegador elija eliminar esta funcionalidad. 21 mar '14 a las 21:18
  • Establecer autocomplete="off"en formes lo único que funcionó para Chrome.
    Andrew
    9 de febrero de 2016 a las 18:41
61

Como han dicho otros, la respuesta es autocomplete="off".

Sin embargo, creo que vale la pena indicar por qué es una buena idea usar esto en ciertos casos, ya que algunas respuestas a esto y preguntas duplicadas han sugerido que es mejor no apagarlo.

No debe dejarse en manos de los usuarios detener los navegadores que almacenan números de tarjetas de crédito. Demasiados usuarios ni siquiera se darán cuenta de que es un problema.

Es particularmente importante desactivarlo en los campos de los códigos de seguridad de las tarjetas de crédito. Como dice esta página :

"Never store the security code ... its value depends on the presumption that the only way to supply it is to read it from the physical credit card, proving that the person supplying it actually holds the card."

El problema es que si se trata de una computadora pública (cibercafé, biblioteca, etc.), es fácil para otros usuarios robar los detalles de su tarjeta, e incluso en su propia máquina, un sitio web malicioso podría robar datos autocompletados .

2
  • 7
    Si fuera a un sitio y se acordara de mi tarjeta en el menú desplegable, me sentiría muy infeliz. Empezaría a preguntarme cómo pudieron ser tan descuidados. 22 de nov. De 2009 a las 5:13
  • 10
    Caso mucho más simple / más crítico. Cuando visito la página de un usuario en la parte de administración de mi sitio, intenta establecer su nombre de usuario y contraseña para que sean mi nombre de usuario y contraseña de administrador, sin poder decir que este no es un formulario de inicio de sesión. Quiero que se recuerde mi contraseña de administrador, pero es un error crítico que intente aplicar ese nombre de usuario / contraseña recordado a cualquier usuario que luego edite.
    rjmunro
    17/12/15 a las 13:35
41

He resuelto la lucha interminable con Google Chrome con el uso de caracteres aleatorios. Cuando siempre renderiza autocompletar con una cadena aleatoria, nunca recordará nada.

<input name="name" type="text" autocomplete="rutjfkde">

Espero que ayude a otras personas.

6
  • 4
    Esto funciona aún mejor. Puede agregar un pequeño JS que genera un código aleatorio para cada carga de página y agregar ese código al campo de entrada: <code> function autoId () {var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; para (var i = 0; i <12; i ++) {autoId + = dict.charAt (Math.floor (Math.random () * dict.length)); } return autoId; } $ ('. autocompleteoff'). attr ('autocomplete', autoId ()); </code> Puede agregar la autocompleteoffclase a su campo de entrada deseado. 31/08/18 a las 13:44
  • no funciona en mi versión de Chrome 68.0.3440.106 (compilación oficial) (64 bits) 6 de septiembre de 2018 a las 5:31
  • Chrome se ha corregido para utilizar el estándar "desactivado" ahora
    MacK
    17/10/18 a las 11:16
  • 1
    Lamentablemente, funciona mejor que lo que se llama estándar en Chrome. 4 de nov. De 2018 a las 3:01
  • 1
    Hoy descubrí que Chrome sobrescribirá una cadena aleatoria con "Desactivado". No puedo creer que los desarrolladores de Chrome hagan mal este atributo y no lo controlen. ¿Por qué ohh mi tengo?
    step
    7/10/19 a las 20:11
37

Tendría que rogar por diferir con esas respuestas que dicen evitar deshabilitar la función de autocompletar.

Lo primero que se debe mencionar es que la función de autocompletar no está explícitamente deshabilitada en los campos del formulario de inicio de sesión es un error de PCI-DSS. Además, si la máquina local de un usuario se ve comprometida, un atacante puede obtener trivialmente cualquier dato de autocompletado debido a que está almacenado en claro.

Ciertamente, existe un argumento a favor de la usabilidad, sin embargo, hay un equilibrio muy fino cuando se trata de qué campos de formulario deben tener el autocompletado deshabilitado y cuáles no.

4
  • Me acaba de llamar la atención que IE no activa los eventos onChange cuando se completa una entrada de texto con Autocompletar. Tenemos docenas de formularios y más de mil eventos onChange (validaciones de entrada, lógica empresarial) esparcidos por todos ellos. Recientemente actualizamos IE a una versión más nueva y, de repente, empezaron a suceder cosas extrañas. Afortunadamente, estamos ejecutando una aplicación de intranet y el autocompletado no es un problema de UX para nosotros, es más fácil simplemente apagarlo. 9/06/2015 a las 13:36
  • 4
    Si la máquina local de un usuario se ve comprometida, están jodidos, punto. Podría tener un keylogger instalado, podría tener un certificado raíz SSL falso agregado y todo enviado a través de un proxy falso, etc.Tengo una razón real para deshabilitar el autocompletado: cuando inicio sesión como administrador y visito la página de edición de usuario, asigna ese usuario mi nombre de usuario y contraseña de administrador. Necesito prevenir este comportamiento.
    rjmunro
    17/12/15 a las 13:48
  • 1
    Los proveedores de navegadores parecen estar atentos a sus propios intereses. Contraseñas guardadas = bloqueo del usuario. Y la activación / desactivación de autocompletar era demasiado simple: ¿por qué no un estándar complejo de sugerencias semánticas ( html.spec.whatwg.org/multipage/… ) que, por cierto, permite que el navegador recopile datos semánticos valiosos de los sitios de cada uno? visitas de usuarios? 21/11/2017 a las 13:38
  • el caso de uso específico que estoy tratando de resolver es este: ya están conectados, pero ahora están a punto de acceder a algo aún más sensible. Quiero mostrarles un diálogo que les haga volver a autenticarse, ante la posibilidad de que se hayan ido a fumar y una mala persona se haya sentado en su silla. He probado varias técnicas para vencer el autocompletado y nada funciona. ahora estoy pensando, tal vez, al menos, usar la vieja 'contraseña = window.prompt ("Por favor, vuelva a ingresar su contraseña")' más el nombre de usuario en la sesión, e intente autenticar eso.
    David
    12/01/18 a las 18:09
34

Tres opciones:

Primero:

<input type='text' autocomplete='off' />

Segundo:

<form action='' autocomplete='off'>

Tercero (código JavaScript):

$('input').attr('autocomplete', 'off');
2
  • 2
    La primera y la segunda opción deberían ser una opción, ya que varía según la forma en que los navegadores manejen esto.
    rybo111
    13/06/2015 a las 21:35
  • Intenté $ formElement.attr ('autocomplete', 'off'); y no funciona. 1 de noviembre de 2015 a las 10:23
26

En una nota relacionada o en realidad, completamente opuesta:

"If you're the user of the aforementioned form and want to re-enable the autocomplete functionality, use the 'remember password' bookmarklet from this bookmarklets page. It removes all autocomplete="off" attributes from all forms on the page. Keep fighting the good fight!"

25

Esto funciona para mi.

<input name="pass" type="password" autocomplete="new-password" />

También podemos usar esta estrategia en otros controles como texto, selección, etc.

0
25

In addition to

autocomplete="off"

Use

readonly onfocus="this.removeAttribute('readonly');"

para las entradas que no quiere que recuerden los datos del formulario ( username, password, etc.) como se muestra a continuación:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

Espero que esto ayude.

4
  • 1
    Para mí, en IE11, no puedo escribir en el cuadro de texto incluso después de que el enfoque elimina el atributo de solo lectura. Sin embargo, si hago clic por segunda vez en el cuadro de texto, puedo escribir. 10/11/2017 a las 19:16
  • Me encontré con el mismo problema con IE11 (no puedo escribir hasta el segundo enfoque). Agregar un desenfoque y luego enfocar nuevamente funciona. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
    palmsey
    22/02/18 a las 14:59
  • @Andrew Seguro que puedes. Este es el principio básico para superar este problema y también agregué una actualización que contiene un ejemplo de código completo;) 8/11/18 a las 18:20
  • También he agregado onfocusout="this.setAttribute('readonly', 'readonly');" 21/06/19 a las 18:21
24

Solo configúrelo autocomplete="off". Hay una muy buena razón para hacer esto: desea proporcionar su propia funcionalidad de autocompletar.

22

He estado probando infinitas soluciones y luego encontré esto:

En lugar de autocomplete="off"simplemente usarautocomplete="false"

Tan simple como eso, ¡y también funciona a las mil maravillas en Google Chrome!

4
  • Como dijiste en Chrome, el valor de apagado no funciona. Tiene que ser "falso"
    azuax
    14 de mayo de 2015 a las 3:31
  • Me funciona en Chrome 44.0.2403.130.
    GuiGS
    13/08/15 a las 2:33
  • 1
    Intenté esto: $ formElement.attr ('autocomplete', 'false'); lo siento no funciona. 1/11/15 a las 10:24
  • Pero, ¿funciona en otros navegadores? 8 de abril a las 23:41
22

De hecho, usamos la idea de sasb para un sitio.

Era una aplicación web de software médico para administrar el consultorio de un médico. Sin embargo, muchos de nuestros clientes eran cirujanos que usaban muchas estaciones de trabajo diferentes, incluidas las terminales semipúblicas. Por lo tanto, querían asegurarse de que un médico que no comprenda las implicaciones de las contraseñas guardadas automáticamente o que no esté prestando atención no pueda dejar accidentalmente su información de inicio de sesión fácilmente accesible.

Por supuesto, esto fue antes de la idea de la navegación privada que está comenzando a aparecer en Internet Explorer 8, Firefox 3.1, etc. Aun así, muchos médicos se ven obligados a usar navegadores de la vieja escuela en hospitales con TI que no cambiará.

Entonces, hicimos que la página de inicio de sesión generara nombres de campo aleatorios que solo funcionarían para esa publicación. Sí, es menos conveniente, pero al usuario le cuesta mucho no almacenar la información de inicio de sesión en terminales públicas.

1
  • No hay ningún usuario actual con el nombre "sasb" aquí (incluido en la respuesta eliminada). (Aunque los comentarios sobre algunas respuestas eliminadas ya no son visibles). ¿A qué respuesta (o comentario) se refiere? 8 de abril a las 23:05
22

Ninguna de las soluciones me funcionó en esta conversación.

Finalmente descubrí una solución HTML pura que no requiere JavaScript , funciona en navegadores modernos (excepto Internet Explorer; tenía que haber al menos una trampa, ¿verdad?), Y no requiere que desactive la función de autocompletar para todo el formulario. .

Simplemente apague el autocompletar en el formy luego enciéndalo para cualquiera inputque desee que funcione dentro del formulario. Por ejemplo:

<form autocomplete="off">
    <!-- These inputs will not allow autocomplete and Chrome
         won't highlight them yellow! -->
    <input name="username"  />
    <input name="password" type="password" />
    <!-- This field will allow autocomplete to work even
         though we've disabled it on the form -->
    <input name="another_field" autocomplete="on" />
</form>
0
20

Creo que autocomplete=offes compatible con HTML 5.

Pregúntese por qué quiere hacer esto, sin embargo, puede tener sentido en algunas situaciones, pero no lo haga por el simple hecho de hacerlo.

Es menos conveniente para los usuarios y ni siquiera es un problema de seguridad en OS X (mencionado por Soren a continuación). Si le preocupa que le roben las contraseñas a las personas de forma remota, un registrador de pulsaciones de teclas podría hacerlo aunque su aplicación lo utilice autcomplete=off.

Como usuario que elige que un navegador recuerde (la mayor parte de) mi información, me molestaría que su sitio no recordara la mía.

17

La mejor solucion:

Evite el autocompletado de nombre de usuario (o correo electrónico) y contraseña:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

Evitar autocompletar un campo:

<input type="text" name="field" autocomplete="nope">

Explicación: autocompletecontinúa funcionando <input>, autocomplete="off"no funciona, pero puede cambiar offa una cadena aleatoria, como nope.

Trabaja en:

  • Cromo: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 y 64

  • Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 y 58

4
  • 2
    Encontré que esto funcionaba en mis pruebas preliminares. Tan extraño que "off" no funciona. 26/03/18 a las 14:36
  • Esto no funciona para Chrome en Android. Intenté establecer valores de cadena para el autocompleteatributo y todavía muestra las entradas anteriores como sugerencias de autocompletar debajo de la entrada. 10 de agosto de 2018 a las 4:55
  • @ tebs1200 ¿Cuál? ¿El campo de contraseña o el campo de texto?
    Cava
    12/08/18 a las 2:55
  • @Cava perdón por la demora en la respuesta. El campo de texto. No importa el valor que establezca autocomplete, todavía obtengo un menú desplegable de sugerencias basado en los valores ingresados ​​previamente. Está bien en el escritorio, pero no en Chrome de Android. 18 de agosto de 2018 a las 2:57
dieciséis

Utilice un nombre y una identificación no estándar para los campos, de modo que en lugar de "nombre" tenga "nombre_". Los navegadores no lo verán como el campo de nombre.

La mejor parte de esto es que puede hacer esto en algunos campos, pero no en todos, y se autocompletarán algunos, pero no todos los campos.

3
  • El problema con esto es que si otros sitios usan "name_" para lograr el mismo objetivo, entonces estás de vuelta al punto de partida.
    ConroyP
    20/108 a las 9:01
  • 5
    así que conviértalo en "nombre_misitio". Si alguien más está usando eso, le haría preguntas ... 13 de mayo de 2009 a las 12:50
  • esto estropea algunas de esas utilidades de llenado automático 22 de nov. De 2009 a las 5:11
dieciséis

Agregar autocomplete="off"no lo va a cortar.

Cambie el inputatributo de tipo a type="search".
Google no aplica el autocompletado a las entradas con un tipo de búsqueda.

1
  • 6
    Es un truco. El campo no es un campo de búsqueda. En el futuro, esto podría causar problemas.
    Roel
    31/12/15 a las 13:24
dieciséis

Me encontré con este problema e intenté varias fallas, pero esta funciona para mí (que se encuentra en MDN ):

In some cases, the browser will keep suggesting autocompletion values even if the autocomplete attribute is set to off. This unexpected behavior can be quite puzzling for developers. The trick to really force the no-completion is to assign a random string to the attribute like so:

autocomplete="nope"
0
14

Añadiendo el

autocomplete="off"

a la etiqueta del formulario deshabilitará el autocompletado del navegador (lo que se escribió previamente en ese campo) de todos los inputcampos dentro de ese formulario en particular.

Probado en:

  • Firefox 3.5, 4 BETA
  • Internet Explorer 8
  • Cromo
13

Así que aquí está:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">
5
  • 1
    Parece una buena idea aplicar un estilo a los cuadros de texto para evitar que parpadeen las contraseñas visibles.
    Andrew
    8/11/18 a las 16:33
  • 1
    Muchas gracias, esto hizo el trabajo +1, mi variación a su solución fue hacerlo por una sola línea: <input oninput = "this.type = 'password'" id = "inputpassword" type = "text"> 21/02/19 a las 10:43
  • @HasnaaIbraheem Gracias (: a veces, más legible es mejor. 21/02/19 a las 10:54
  • Esta es la única forma en que pude hacer que funcione: el atributo de solo lectura funcionó pero arruinó el orden de tabulación. 2 de marzo a las 20:57
  • Una explicación estaría en orden. Por ejemplo, ¿cuál es la idea / esencia? ¿En qué se probó (incluidas las versiones)? 9 de abril a las 0:06
12

Este es un problema de seguridad que los navegadores ignoran ahora. Los navegadores identifican y almacenan contenido utilizando nombres de entrada, incluso si los desarrolladores consideran que la información es confidencial y no debe almacenarse.

Hacer un nombre de entrada diferente entre 2 solicitudes resolverá el problema (pero aún se guardará en la caché del navegador y también aumentará la caché del navegador).

Pedir al usuario que active o desactive opciones en la configuración de su navegador no es una buena solución. El problema se puede solucionar en el backend.

Aquí está la solución. Todos los elementos de autocompletar se generan con una entrada oculta como esta:

<?php $r = md5(rand() . microtime(TRUE)); ?>
<form method="POST" action="./">
    <input type="text" name="<?php echo $r; ?>" />
    <input type="hidden" name="__autocomplete_fix_<?php echo $r; ?>" value="username" />
    <input type="submit" name="submit" value="submit" />
</form>

El servidor luego procesa las variables de publicación de esta manera: ( Demo )

foreach ($_POST as $key => $val) {
    $newKey = preg_replace('~^__autocomplete_fix_~', '', $key, 1, $count);
    if ($count) {
        $_POST[$val] = $_POST[$newKey];
        unset($_POST[$key], $_POST[$newKey]);
    }
}

Se puede acceder al valor como de costumbre

echo $_POST['username'];

Y el navegador no podrá sugerir información de la solicitud anterior o de usuarios anteriores.

Esto seguirá funcionando incluso si los navegadores actualizan sus técnicas para ignorar / respetar los atributos de autocompletar.

0
12

Para evitar el XHTML no válido, puede establecer este atributo usando JavaScript. Un ejemplo usando jQuery:

<input type="text" class="noAutoComplete" ... />

$(function() {
    $('.noAutoComplete').attr('autocomplete', 'off');
});

El problema es que los usuarios sin JavaScript obtendrán la funcionalidad de autocompletar.

3
  • 38
    esto no evita xhtml inválido, simplemente agrega el bit inválido dinámicamente después de que lo haya verificado, ¡lo declaró válido!
    Andiih
    16/04/11 a las 15:53
  • @Andiih: Entonces, ¿hay alguna manera de hacer que el autocompletado funcione en xhtml? 22/04/11 a las 15:14
  • 1
    Trabajar (o dejar de funcionar, que es el objetivo): sí como arriba. Pero válido, no.
    Andiih
    25/04/11 a las 10:46
12

No puedo creer que esto siga siendo un problema mucho tiempo después de que se informó. Las soluciones anteriores no funcionaron para mí, ya que Safari parecía saber cuándo el elemento no se mostraba o estaba fuera de la pantalla, sin embargo, lo siguiente sí funcionó para mí:

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>
1
  • 1
    Entonces, ¿poner esto antes de los campos de nombre de usuario y contraseña reales funcionó? el navegador los llenó y no los reales
    Andrew
    8/11/18 a las 16:54
11

Pruebe estos también si simplemente autocomplete="off"no funciona:

autocorrect="off" autocapitalize="off" autocomplete="off"
1
10

Ninguno de los trucos mencionados aquí funcionó para mí en Chrome. Hay una discusión sobre el problema aquí: https://code.google.com/p/chromium/issues/detail?id=468153#c41

Añadiendo esto dentro de una <form>obra (al menos por ahora):

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>
1
  • 1
    Tenga en cuenta que, al utilizar esta técnica, FireFox seguirá llenando automáticamente ese campo oculto, que se incluirá al enviar el formulario. Eso probablemente sería malo, ya que la contraseña se transferiría a través de una conexión potencialmente no segura. Afortunadamente, agregar maxlength="0"evita que Firefox complete automáticamente el campo. 7 de nov. De 2017 a las 12:30
9

Puede usarlo en input.

Por ejemplo;

<input type=text name="test" autocomplete="off" />