Pregunta ¿Existe una forma válida de W3C para deshabilitar la función autocompletar en un formulario HTML?


Al usar el xhtml1-transitional.dtd doctype, recopilando un número de tarjeta de crédito con el siguiente código HTML

<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>

marcará una advertencia en el validador W3C:

no hay ningún atributo "autocompletar".

¿Existe una forma W3C / estándares para deshabilitar el autocompletado del navegador en campos sensibles en un formulario?


410
2018-02-24 15:43


origen


Respuestas:


aquí es un buen artículo del MDC que explica los problemas (y las soluciones) para formar el autocompletado. Microsoft ha publicado algo similar aquí, también.

Para ser sincero, si esto es algo importante para sus usuarios, parece apropiado 'romper' los estándares de esta manera. Por ejemplo, Amazon usa el atributo 'autocompletar' bastante, y parece funcionar bien.

Si desea eliminar la advertencia por completo, puede usar JavaScript para aplicar el atributo a los navegadores que lo admitan (IE y Firefox son los navegadores importantes) utilizando someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );

Finalmente, si su sitio usa HTTPS, IE automáticamente desactivará el autocompletado (como lo hacen otros navegadores, hasta donde yo sé).

Actualizar

Como esta respuesta todavía recibe bastantes votos a favor, solo quería señalar que en HTML5, puede usar el atributo 'autocompletar' en su elemento de formulario. Ver el documentación en W3C por eso.


408
2018-02-24 15:52



Me sorprendería mucho si el W3C hubiera propuesto una forma que funcionara con (X) HTML4. La función de autocompletar está completamente basada en el navegador y se introdujo durante los últimos años (mucho después de que se escribió el estándar HTML4).

Sin embargo, no me sorprendería que HTML5 tuviera uno.

Editar: Como yo pensaba, HTML5 hace tengo eso característica. Para definir su página como HTML5, use el siguiente doctype (es decir: ponga esto como el primer texto en su código fuente). Tenga en cuenta que no todos los navegadores admiten este estándar, ya que todavía está en borrador.

<!DOCTYPE html>

63
2018-02-24 15:47



HTML 4: No

HTML 5: Sí

El atributo autocompletar es un atributo enumerado. El atributo   tiene dos estados los en mapas de palabras clave para el estado activado, y el apagado   mapas de palabras clave al estado apagado. El atributo también puede ser omitido. los   valor por defecto faltante es el en estado. los apagado estado indica que por   Por defecto, los controles de formulario en el formulario tendrán su nombre de campo de autocompletar   ajustado a apagado; el estado activado indica que, de forma predeterminada, los controles de forma en   la forma tendrá su autofill nombre de campo establecido en "on".

Referencia: W3


56
2018-02-24 15:55



No, un buen artículo está aquí en Wiki Mozila.

Continuaría usando el inválido attribute. Creo que aquí es donde el pragmatismo debería ganar sobre la validación.


31
2018-02-24 15:48



No, pero el autocompletado del navegador a menudo se desencadena por el campo que tiene el mismo name atributo como campos que fueron completados previamente. Si pudiera armar una forma inteligente de tener un nombre de campo aleatorio, la función de autocompletar no podrá extraer ningún valor previamente ingresado para el campo.

Si le pusieras un campo de entrada con un nombre como "email_<?= randomNumber() ?>", y luego tener el script que recibe este bucle de datos a través de las variables POST o GET buscando algo que coincida con el patrón"email_[some number]", podría sacar esto adelante, y esto habría (prácticamente) garantizado el éxito, independientemente del navegador.


30
2018-02-24 15:48



¿Qué hay de configurarlo con JavaScript?

var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false

No es perfecto, pero tu HTML será válido.


23
2018-02-24 15:57



Sugiero atrapar los 4 tipos de entrada:

$('form,input,select,textarea').attr("autocomplete", "off");

Referencia:


19
2017-09-07 21:30



Si usas jQuery, puedes hacer algo como eso:

$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});

y usa la clase autocompleteOff donde quieras:

<input type="text" name="fieldName" id="fieldId" class="firstCSSClass otherCSSClass autocompleteOff" />

Si quieres que TODA tu información sea autocomplete=off, simplemente puedes usar eso:

$(document).ready(function(){$("input").attr("autocomplete","off");});

11
2017-08-10 16:44