Ho appena scoperto che se hai un nome utente e una password ricordati per un sito, la versione corrente di Chrome riempirà automaticamente il tuo nome utente / indirizzo email nel campo prima di qualsiasi type=password
campo. Non importa come si chiama il campo - presuppone solo il campo prima che la password diventi il tuo nome utente.
Vecchia soluzione
Basta usare <form autocomplete="off">
e impedisce la precompilazione della password e qualsiasi tipo di riempimento euristico di campi basato su ipotesi che un browser può fare (che spesso sono sbagliate). Al contrario dell'uso, <input autocomplete="off">
che sembra essere praticamente ignorato dalla password di compilazione automatica (in Chrome, cioè, Firefox la obbedisce).
Soluzione aggiornata
Chrome ora ignora <form autocomplete="off">
. Pertanto la mia soluzione alternativa (che avevo eliminato) è ora di gran moda.
Basta creare un paio di campi e renderli nascosti con "display: none". Esempio:
<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>
Quindi metti i tuoi campi reali sotto.
Ricorda di aggiungere il commento o altre persone della tua squadra si chiederanno cosa stai facendo!
Aggiornamento marzo 2016
Appena testato con l'ultimo Chrome - tutto bene. Questa è una risposta abbastanza vecchia ora, ma voglio solo menzionare che il nostro team la utilizza da anni su decine di progetti. Funziona ancora alla grande nonostante alcuni commenti qui sotto. Non ci sono problemi con l'accessibilità perché i campi display:none
significano che non ottengono il focus. Come ho già detto, devi metterli davanti ai tuoi campi reali.
Se si utilizza JavaScript per modificare il modulo, è necessario un ulteriore trucco. Mostra i campi falsi mentre stai manipolando il modulo e poi nascondili di nuovo un millisecondo dopo.
Codice di esempio usando jQuery (supponendo che tu dia una classe ai tuoi campi falsi):
$(".fake-autofill-fields").show();
// some DOM manipulation/ajax here
window.setTimeout(function () {
$(".fake-autofill-fields").hide();
},1);
Aggiornamento luglio 2018
La mia soluzione non funziona più così bene da quando gli esperti di anti-usabilità di Chrome hanno lavorato sodo. Ma ci hanno lanciato un osso sotto forma di:
<input type="password" name="whatever" autocomplete="new-password" />
Funziona e risolve principalmente il problema.
Tuttavia, non funziona quando non si dispone di un campo password ma solo di un indirizzo e-mail. Può anche essere difficile far smettere di ingiallire e precompilare. La soluzione dei campi falsi può essere utilizzata per risolvere questo problema.
Infatti a volte è necessario rilasciare due lotti di campi falsi e provarli in luoghi diversi. Ad esempio, avevo già campi falsi all'inizio del mio modulo, ma Chrome ha recentemente iniziato a precompilare il mio campo "Email", quindi ho raddoppiato e ho inserito altri campi falsi appena prima del campo "Email", e questo lo ha risolto . La rimozione del primo o del secondo lotto di campi ripristina un riempimento automatico troppo zelante errato.
Aggiornamento marzo 2020
Non è chiaro se e quando questa soluzione funziona ancora. Sembra funzionare ancora a volte ma non sempre.
Nei commenti qui sotto troverai alcuni suggerimenti. Uno appena aggiunto da @anilyeni potrebbe valere qualche indagine in più:
Come ho notato, autocomplete="off"
funziona su Chrome 80, se sono presenti meno di 3 elementi <form>
. Non so quale sia la logica o dove sia la relativa documentazione.
Anche questo di @dubrox può essere rilevante, anche se non l'ho testato:
grazie mille per il trucco, ma ti preghiamo di aggiornare la risposta, poiché display:none;
non funziona più, ma position: fixed;top:-100px;left:-100px; width:5px;
funziona :)
Aggiornamento APRILE 2020
Un valore speciale per Chrome per questo attributo sta facendo il lavoro: (testato sull'input - ma non da me)
autocomplete="chrome-off"