Bene, un po 'tardi alla festa, ma sembra che ci sia un po' di incomprensioni su come autocomplete
dovrebbe e non dovrebbe funzionare. Secondo le specifiche HTML, l'agente utente (in questo caso Chrome) può sovrascrivere autocomplete
:
https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
Un agente utente può consentire all'utente di sovrascrivere il nome del campo di compilazione automatica di un elemento, ad es. Per cambiarlo da "off" a "on" per consentire ai valori di essere ricordati e precompilati nonostante le obiezioni dell'autore della pagina, o di essere sempre "off", senza mai ricordare valori. Tuttavia, i programmi utente non dovrebbero consentire agli utenti di ignorare banalmente il nome del campo di compilazione automatica da "off" a "on" o altri valori, poiché vi sono implicazioni di sicurezza significative per l'utente se tutti i valori vengono sempre ricordati, indipendentemente dalle preferenze del sito.
Quindi, nel caso di Chrome, gli sviluppatori hanno sostanzialmente detto "lasceremo questo all'utente a decidere nelle sue preferenze se vogliono autocomplete
lavorare o no. Se non lo vuoi, non abilitarlo nel tuo browser" .
Tuttavia, sembra che questo sia un po 'troppo zelante da parte mia per i miei gusti, ma è così. La specifica discute anche le potenziali implicazioni di sicurezza di una tale mossa:
La parola chiave "off" indica che i dati di input del controllo sono particolarmente sensibili (ad esempio il codice di attivazione per un'arma nucleare); o che si tratta di un valore che non verrà mai riutilizzato (ad esempio una chiave unica per un accesso bancario) e che quindi l'utente dovrà inserire esplicitamente i dati ogni volta, invece di poter fare affidamento su UA per precompilare il valore per lui; o che il documento fornisce il proprio meccanismo di completamento automatico e non desidera che l'agente utente fornisca i valori di completamento automatico.
Quindi, dopo aver provato la stessa frustrazione di tutti gli altri, ho trovato una soluzione che funziona per me. È simile in vena alle autocomplete="false"
risposte.
Un articolo di Mozilla parla esattamente di questo problema:
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
In alcuni casi, il browser continuerà a suggerire i valori di completamento automatico anche se l'attributo di completamento automatico è disattivato. Questo comportamento inaspettato può essere abbastanza sconcertante per gli sviluppatori. Il trucco per forzare davvero il non completamento è quello di assegnare una stringa casuale all'attributo
Quindi il seguente codice dovrebbe funzionare:
autocomplete="nope"
E così dovrebbe ciascuno dei seguenti:
autocomplete="false"
autocomplete="foo"
autocomplete="bar"
Il problema che vedo è che l'agente del browser potrebbe essere abbastanza intelligente da apprendere l' autocomplete
attributo e applicarlo la prossima volta che vede il modulo. In tal caso, l'unico modo in cui riesco a risolvere il problema sarebbe quello di modificare dinamicamente il autocomplete
valore dell'attributo quando viene generata la pagina.
Un punto degno di nota è che molti browser ignoreranno le autocomplete
impostazioni per i campi di accesso (nome utente e password). Come afferma l'articolo di Mozilla:
Per questo motivo, molti browser moderni non supportano il completamento automatico = "off" per i campi di accesso.
- Se un sito imposta autocomplete = "off" per un modulo e il modulo include campi di immissione nome utente e password, il browser offrirà comunque di ricordare questo accesso e, se l'utente accetta, il browser riempirà automaticamente quei campi la prossima volta che l'utente visita questa pagina.
- Se un sito imposta autocomplete = "off" per i campi di immissione del nome utente e della password, il browser offrirà comunque di ricordare questo accesso e, se l'utente acconsente, il browser riempirà automaticamente quei campi la volta successiva che l'utente visita questa pagina.
Questo è il comportamento in Firefox (dalla versione 38), Google Chrome (dalla 34) e Internet Explorer (dalla versione 11).
Finalmente alcune informazioni sul fatto che l'attributo appartenga form
all'elemento o input
all'elemento. Le specifiche hanno di nuovo la risposta:
Se l'attributo di completamento automatico viene omesso, viene invece utilizzato il valore predefinito corrispondente allo stato dell'attributo di completamento automatico del proprietario del modulo dell'elemento ("on" o "off"). Se non è presente alcun proprietario del modulo, viene utilizzato il valore "on".
Così. Inserendolo nel modulo dovrebbe applicarsi a tutti i campi di input. Metterlo su un singolo elemento dovrebbe applicarsi solo a quell'elemento (anche se non ce n'è uno nel modulo). Se autocomplete
non impostato affatto, per impostazione predefinita è on
.
Sommario
Per disabilitare autocomplete
sull'intero modulo:
<form autocomplete="off" ...>
O se hai bisogno di farlo dinamicamente:
<form autocomplete="random-string" ...>
Per disabilitare autocomplete
su un singolo elemento (indipendentemente dall'impostazione del modulo presente o meno)
<input autocomplete="off" ...>
O se hai bisogno di farlo dinamicamente:
<input autocomplete="random-string" ...>
E ricorda che alcuni programmi utente possono ignorare anche i tuoi tentativi più difficili di disabilitare autocomplete
.