Disabilitazione del riempimento automatico di Chrome


620

Ho riscontrato problemi con il comportamento di compilazione automatica di Chrome in diverse forme.

Tutti i campi nel modulo hanno nomi molto comuni e precisi, come "e-mail", "nome" o "password", e hanno anche autocomplete="off"impostato.

Il flag di completamento automatico ha disabilitato correttamente il comportamento di completamento automatico, in cui viene visualizzato un elenco a discesa di valori quando si inizia a digitare, ma non ha modificato i valori in cui Chrome popola automaticamente i campi.

Questo comportamento sarebbe corretto, tranne per il fatto che Chrome sta riempiendo gli input in modo errato, ad esempio inserendo l'input del telefono con un indirizzo email. I clienti si sono lamentati di questo, quindi è verificato che accada in più casi e non come una sorta di risultato a qualcosa che ho fatto localmente sul mio computer.

L'unica soluzione attuale che mi viene in mente è quella di generare dinamicamente nomi di input personalizzati e quindi estrarre i valori sul back-end, ma questo sembra un modo piuttosto confuso per risolvere questo problema. Ci sono tag o stranezze che cambiano il comportamento di compilazione automatica che potrebbero essere utilizzati per risolvere questo problema?


6
Non è un duplicato. Questo gestisce la disabilitazione del riempimento automatico, quello gestisce lo stile del colore di riempimento automatico ...
Nicu Surdu

17
autocomplete = "false" invece di autocomplete = "off" secondo Kaszoni Ferencz rispondi, ottieni il voto per questo popolo.
roughcoder

7
Guarda il numero di risposte a questa domanda - dovrebbe dirti qualcosa: stai combattendo una battaglia persa. Questo non è più un problema di Chrome, Firefox e altri hanno seguito l'esempio. Piaccia o no, devi accettare la decisione del settore dei browser, che il modulo di completamento automatico è la scelta dell'utente: puoi combatterli, ma perderai. Alla fine della giornata, la domanda che dovresti porre non è: come posso sovvertire il completamento automatico, ma piuttosto come creare moduli che funzionano bene con il completamento automatico. Le tue preoccupazioni sulla sicurezza non sono tue, ma degli utenti.
mindplay.dk,

21
Siamo spiacenti, ma la risposta di @ mindplay.dk è controproducente. La mia situazione è che ho utenti che hanno effettuato l'accesso al mio sito e una pagina del sito è per loro di inserire informazioni account / pwd per altri sistemi. Quando inserisco una finestra di dialogo per inserirne una nuova, le loro informazioni di accesso per il mio sito vengono compilate, il che è completamente sbagliato e causerà problemi se / quando gli utenti inseriscono inavvertitamente tali informazioni. I due non hanno nulla a che fare con l'un l'altro. In questo caso il browser sta facendo qualcosa di contrario a ciò che l'utente desidera.
Mike K,

8
@ mindplay.dk - La mia applicazione web è un'applicazione di gestione del flusso di lavoro per il posto di lavoro, quindi no, le preoccupazioni per la sicurezza sono mie di cui preoccuparsi, come richiesto dal top management e devono essere rispettati da tutti i dipendenti, ovvero "gli utenti. " Tuttavia, chiedere loro di impostare Chrome, IE o qualsiasi altro browser stesso lascerà delle lacune nel processo di autenticazione, poiché possono, intenzionalmente o no, finire con il riempimento automatico. Non tutte le applicazioni Web sono dello stesso tipo, con gli stessi tipi di utenti o preoccupazioni.
PoloHole:

Risposte:


906

Per le nuove versioni di Chrome puoi semplicemente inserire autocomplete="new-password"il campo della password e il gioco è fatto. L'ho controllato, funziona bene.

Ho ricevuto quel consiglio dallo sviluppatore di Chrome in questa discussione: https://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7

PS Tieni presente che Chrome tenterà di dedurre il comportamento del riempimento automatico da nome, ID e qualsiasi contenuto di testo che può circondare il campo, comprese etichette e nodi di testo arbitrari. Se è presente un token di completamento automatico come street-addressnel contesto, Chrome lo compilerà automaticamente come tale. L'euristico può essere piuttosto confuso poiché a volte si attiva solo se ci sono campi aggiuntivi nel modulo o no se ci sono troppi campi nel modulo. Si noti inoltre che autocomplete="no"sembrerà funzionare ma autocomplete="off"non per ragioni storiche. autocomplete="no"stai dicendo al browser che questo campo dovrebbe essere completato automaticamente come un campo chiamato "no". Se generi autocompletenomi casuali univoci disabiliti il ​​completamento automatico.

Se i tuoi utenti hanno visitato moduli non validi, le informazioni di compilazione automatica potrebbero essere danneggiate . Farli entrare manualmente e correggere le informazioni di compilazione automatica in Chrome può essere un'azione necessaria da parte loro.


115
"new-password" ha funzionato per me dopo aver provato "off" e "false"
Kevin

26
Questa è l'unica soluzione funzionante ora. Falso e spento, non funzionano più. Dovrebbe essere la risposta corretta ora.
David,

5
Il motivo per cui funziona è perché il team Chrome sta provando a creare i valori di completamento automatico consigliati, come mostrato @ developers.google.com/web/fundamentals/design-and-ui/input/… Il valore "new-password" è uno dei pochi che hanno una logica aggiuntiva che lo circonda, e in questo caso, è di sospendere il riempimento automatico ma consente comunque suggerimenti di completamento automatico
Deminetix

30
Non funzionante dall'1.11.2018 Versione 63.0.3239.132 (build ufficiale) (64 bit)
PellucidWombat

37
Volevo solo dire .. Dopo essermi imbattuto in questo problema ... Chrome è un vero pezzo di lavoro. Quindi ora dobbiamo saltare attraverso i cerchi per disabilitare la funzionalità che doveva rimanere facoltativa. In quale mondo sarebbe necessario il riempimento automatico in un'applicazione aziendale in cui l'indirizzo è nuovo / diverso ogni volta. Google sta diventando cattivo quanto Microsoft.
Eddy Howard,

700

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=passwordcampo. 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:nonesignificano 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"


7
Ero così sicuro che avrebbe funzionato come hai spiegato perfettamente il riempimento euristico automatico che sto vivendo con l'input prima del campo password. Sfortunatamente, non ha funzionato per me, ho messo autocomplete = "off" sia sul modulo che su tutti gli input e vengono comunque riempiti. L'unica soluzione che ha funzionato per me è nel link di Goodeye sopra. (inserendo un secondo tipo nascosto = input "password" prima che la password scarichi i controlli euristici di Chrome)
Parlamento,


13
Google ha preso la decisione in (Chrome v34, credo) di rendere la politica di SEMPRE ora ignorare il completamento automatico = "off", comprese le direttive a livello di modulo ... andrebbe bene se in realtà avesse ottenuto quei dannati campi.
Jammer,

10
try autocomplete = "false" not autocomplete = "off"
roughcoder

243
Questo attributo è richiesto anche:autocomplete="I told you I wanted this off, Google. But you would not listen."
rybo111

265

Dopo mesi e mesi di lotta, ho scoperto che la soluzione è molto più semplice di quanto tu possa immaginare:

Invece di autocomplete="off"usare autocomplete="false";)

Semplice come quello, e funziona come un fascino anche su Google Chrome!


Aggiornamento di agosto 2019 (credito a @JonEdiger nei commenti)

Nota: molte informazioni online dicono che i browser ora trattano autocomplete = 'false' come gli stessi di autocomplete = 'off'. Almeno in questo momento, impedisce il completamento automatico di questi tre browser.

Impostalo a livello di modulo e quindi per gli input che desideri disattivarlo, imposta un valore non valido come 'none':

<form autocomplete="off"> 
  <input type="text" id="lastName" autocomplete="none"/> 
  <input type="text" id="firstName" autocomplete="none"/>
</form>

8
Ha funzionato per me! Ma c'è un'osservazione importante: ho 5 campi nella mia pagina web: Nome, Indirizzo, Codice postale, Telefono ed e-mail. Quando ho incluso autocomplete = 'false' sul modulo e sul campo Nome, ha funzionato ancora. Tuttavia, quando ho inserito il completamento automatico = 'false' anche nel campo Indirizzo, si è fermato automaticamente a riempirli automaticamente! Quindi, devi mettere la proprietà di completamento automatico non nel campo login o name, ma anche nei seguenti campi! (Ha funzionato su Chrome 43.0.2357.81 dal 27/05/2015)
Dvd Franco,

45
SE QUESTO NON FUNZIONA PER TE: tieni presente che esistono due modi in cui Chrome "aiuta" gli utenti. AUTOCOMPLETE chiederà in base a invio precedente nello stesso modulo archiviato e influenzerà le persone che utilizzano il modulo più di una volta. Il completamento automatico è disabilitato con il completamento automatico = "off". Riempimento automatico verrà richiesto in base alla rubrica da moduli simili precedentemente compilati su altre pagine. Evidenzierà anche i campi che sta cambiando. Il riempimento automatico può essere disabilitato con completamento automatico = "false".
genkilabs,

4
Questo non funziona per me (versione 43.0.2357.124 m). Questa è stata probabilmente una svista da parte di Google, che ora è stata risolta. Sembrano pensare "l'utente ha sempre ragione" in quanto vogliono compilare automaticamente tutto. Il problema è che il mio modulo di registrazione salva i dati dell'utente proprio come fa il modulo di login, che sicuramente non è quello che l'utente vuole ...
Rybo111

3
Sì, funziona in Chrome 43.0.2357 !! questo comportamento in Chrome è così fastidioso e questa soluzione mi ha richiesto un po 'di tempo per capire. Grazie per la tua risposta.
Adriano Rosa,

3
non funziona con Chrome 44.0.2403.157. Come può questa funzione funzionare e non funzionare con versioni diverse. È ridicolo
Mattijs il

120

A volte nemmeno autocomplete=offimpedire di compilare le credenziali in campi errati.

Una soluzione alternativa è disabilitare il riempimento automatico del browser utilizzando la modalità di sola lettura e impostare lo stato attivo scrivibile:

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

L' focusevento si verifica con clic del mouse e tabulazione tra i campi.

Aggiornare:

Mobile Safari imposta il cursore sul campo, ma non mostra la tastiera virtuale. Questa nuova soluzione alternativa funziona come prima, ma gestisce la tastiera virtuale:

<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();  }" />

Demo live https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

Spiegazione: Il browser inserisce automaticamente le credenziali nel campo di testo errato?

riempire gli input in modo errato, ad esempio riempire l'input del telefono con un indirizzo e-mail

A volte noto questo strano comportamento su Chrome e Safari, quando ci sono campi password nella stessa forma. Suppongo che il browser cerchi un campo password per inserire le credenziali salvate. Quindi compila automaticamente il nome utente nel campo di input simile al testo più vicino, che appare prima del campo della password in DOM (solo indovinando a causa dell'osservazione). Poiché il browser è l'ultima istanza e non puoi controllarlo,

Questa soluzione di sola lettura sopra ha funzionato per me.


12
che grande soluzione :) dovresti sostituire jquery con questo: this.removeAttribute ("class")
Roey,

Ho usato questo per impedire che un dropdwonlist venisse compilato automaticamente. Ma anche rinnovato di nuovo in modo da non sembrare. Bella idea!
Comodamente, il

1
@Clint: il mio frammento di codice sopra rimuove l' attributo readonly non appena l'utente accede al campo (per clic del mouse o tasto tab). Immagino che ti riferisca a un campo, che è protetto da riempimento automatico , ma non toccato dall'utente. Qual è lo scopo di questo campo - e deve davvero essere protetto? A seconda dello scenario, la rimozione di tutti gli attributi di sola lettura su submit può essere un'opzione. Puoi aggiungere un commento più specifico sul tuo problema? Forse posso aiutarti :)
Dsuess

1
Se stai usando JavaScript. perché non semplicemente impostare il valore su dummye quindi rimuovere nuovamente il valore? L'aggiunta e la rimozione di sola lettura sembra una mossa pericolosa: cosa succede se il browser non vuole che ti concentri su di essa?
Rybo111,

1
Apparentemente google sta cercando di prendere decisioni per tutti noi qui, hanno chiuso il ticket relativo al completamento automatico = "off": bugs.chromium.org/p/chromium/issues/detail?id=468153 . Ma c'è un altro biglietto aperto per la raccolta di casi utente validi per la disabilitazione del riempimento automatico, rispondi a questo biglietto per aumentare la consapevolezza di questo problema qui: bugs.chromium.org/p/chromium/issues/detail?id=587466
Norman Xu

80

Se stai implementando una funzione della casella di ricerca, prova a impostare l' typeattributo searchcome segue:

<input type="search" autocomplete="off" />

Questo funziona per me su Chrome v48 e sembra essere un markup legittimo:

https://www.w3.org/wiki/HTML/Elements/input/search


Sì! :) Grazie! Funziona con Chrome 67.0.3396.99. (Penso che il tuo link dovrebbe essere: w3.org/wiki/HTML/Elements/input/search a settembre 2018).
Andy King,

4
Finalmente! funziona ancora Versione 69.0.3497.100 (build ufficiale) (64 bit) Questa dovrebbe essere la vera risposta!
Venson,

1
tutti hanno ragione e torto e allo stesso tempo dovresti scrivere autocomplete = "off" all'interno del tag <form autocomplete = "off"> invece sull'input e questo interromperà il comportamento di
compilazione

2
Funziona anche se si imposta autocomplete = "off" sul modulo (per modificare l'impostazione predefinita in tutto il modulo) e quindi è sufficiente impostare type = "search" su <input>
John

9
Dopo la versione 72.XX di Chrome, questa correzione non funziona. Trovare la fixe lastest qui stackoverflow.com/a/55045439/1161998
Adheep Mohamed Abdul Kader

65

Prova questo. So che la domanda è piuttosto vecchia, ma questo è un approccio diverso al problema.

Ho anche notato che il problema arriva appena sopra il passwordcampo.

Ho provato entrambi i metodi come

<form autocomplete="off">e <input autocomplete="off">nessuno di loro ha funzionato per me.

Quindi l'ho corretto usando lo snippet di seguito: ho appena aggiunto un altro campo di testo appena sopra il campo del tipo di password e l'ho fatto display:none.

Qualcosa come questo:

<input type="text" name="prevent_autofill" id="prevent_autofill" value="" style="display:none;" />
<input type="password" name="password_fake" id="password_fake" value="" style="display:none;" />
<input type="password" name="password" id="password" value="" />

Spero che possa aiutare qualcuno.


1
Questo ha funzionato per me (per ora). Ho scoperto che ho usato circa una mezza dozzina di hack diversi nel tempo, e dopo un po 'Chrome ha deciso di voler sconfiggere quell'hacking. Quindi è necessario uno nuovo, come questo. Nella mia applicazione, ho un modulo di aggiornamento del profilo con campi e-mail e password che devono essere lasciati vuoti a meno che l'utente non desideri apportare modifiche. Ma quando Chrome si riempie automaticamente, inserisce l'id utente nel campo "conferma email", generando tutti i tipi di condizioni di errore, che portano a ulteriori condizioni di errore, poiché l'utente si dimena per cercare di fare la cosa giusta.
Jeffrey Simon,

2
Una rapida spiegazione del perché questo hack funziona (per ora): Chrome vede il primo tipo = password immessa e lo compila automaticamente e presume che il campo direttamente prima di questo DEVE essere il campo userhame e lo compila automaticamente con il nome utente. @JeffreySimon questo dovrebbe spiegare il fenomeno di userid nel campo di conferma dell'email (stavo vedendo la stessa cosa sul mio modulo).
MrBoJangles,

1
@kentcdodds - non sono sicuro di cosa intendi per non funzionare più. Il tuo jsbin non ha un campo password quindi è una situazione diversa. Uso questa soluzione da anni e recentemente ho notato che era necessaria e ha funzionato per me solo la scorsa settimana (marzo 2015).
Mike Nelson, il

1
Evviva! Una soluzione che sembra funzionare! Vorrei consigliare di dare al campo il nome passworde di avere actual_passwordil campo legittimo, dato che Google ora sembra guardare al name. Tuttavia, ciò significa che Chrome non salverà quindi la password, che è la funzionalità che desidero effettivamente . AAAAARRRRGHH!
Rybo111,

2
Aggiornamento: continua a funzionare per oltre un anno dall'ultima volta che l'ho implementato. Potremmo avere un solido vincitore qui.
MrBoJangles,

48

Non so perché, ma questo mi ha aiutato e ha funzionato.

<input type="password" name="pwd" autocomplete="new-password">

Non ho idea del perché, ma autocompelete = "new-password" disabilita il riempimento automatico. Ha funzionato nell'ultima versione cromata 49.0.2623.112 .


Ho aggiornato Chrome e funziona ancora per me. 50.0.2661.87 (64 bit)
Tauras,

Sfortunatamente, quando si invia il modulo (o quando i campi di input sono nascosti / rimossi), Chrome chiede quindi di salvare il login modificato.
sibbl,

Funziona nella versione 51.0.2704.79 m
Geoffrey Hale,

santo f *** perché funziona? è un bug? perché l'ho testato qui e l'ho inserito solo in un input e ha funzionato sia per l'ingresso che per la password, ma l'ho inserito solo nella password
Leandro RR

Non ne ho idea. Penso che sia una "cosa" cromata creata dagli sviluppatori. Forse mi sbaglio.
Tauras,

46

Per me semplice

<form autocomplete="off" role="presentation">

Fatto.

Testato su più versioni, l'ultimo tentativo è stato il 56.0.2924.87


Aggiunta la versione di @ArnoldRoa, è stata sul nostro sito dal giorno in cui l'ho pubblicata e aveva poche versioni in cui funzionava bene. Che versione stai usando? PC / Mac?
Kuf,

Non funziona su 57.0.2987.110. Chrome lo evidenzia in giallo e precompila il campo con la mia password salvata. Ma la pagina è una pagina di gestione utenti, non una pagina di accesso.

1
@Dummy L'ho testato ora su Chrome latest (57) e funziona ancora per me. Hai fatto qualcosa di speciale con i campi di input? cap hai messo il tuo codice da qualche parte potrei provare a riprodurre?
Kuf,

3
Versione 64.0.3282.186 (build ufficiale) (64 bit) Windows. 01-03-2018 NON FUNZIONA per disabilitare il riempimento automatico.
Billy Jean,

2
Abbastanza sicuro questo rimuove la forma / input dalle tecnologie assistive w3c.github.io/using-aria/#ariapresentation
Olex Ponomarenko


19

È così semplice e complicato :)

google chrome fondamentalmente cerca ogni primo elemento password visibile all'interno di <form>, <body>e <iframe>tag per abilitare il riempimento automatico per loro, quindi per disabilitare questo è necessario aggiungere un elemento password fittizio come il seguente:

    • se l'elemento password all'interno di un <form>tag è necessario inserire l'elemento fittizio come primo elemento nel modulo immediatamente dopo il <form>tag aperto

    • se il tuo elemento password non all'interno di un <form>tag inserisci l'elemento fittizio come primo elemento nella tua pagina html immediatamente dopo il <body>tag aperto

  1. È necessario nascondere l'elemento fittizio senza usare css, display:nonequindi in pratica utilizzare quanto segue come elemento password fittizio.

    <input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/>

1
Ottimo lavoro, come hai scoperto l'algoritmo di Chrome? Ho appena scoperto che il mio vecchio metodo che modifica il valore con JS dopo che la pagina è stata caricata con un timer setTimeout non funziona più. Ma funziona perfettamente!

Sfortunatamente, non funziona con i normali input TextBox.
eYe

1
attualmente funziona solo impostando la proprietà name;)
Fareed Alnamrouti

Su Chrome 58 questo non funziona. Usa larghezza: 1px. Se il campo della password è completamente nascosto, Chrome lo compila automaticamente. Anche z-index: -999 potrebbe essere utile in modo che non si sovrapponga a nessun contenuto.
cristiancastrodc,

1
Funziona su Chrome 67.0 su componenti html angolari<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">...
Junior Mayhé,

19

Ecco le mie soluzioni proposte, dal momento che Google sta insistendo per ignorare ogni soluzione che le persone sembrano fare.

Opzione 1: selezionare tutto il testo al clic

Imposta i valori degli input su un esempio per il tuo utente (ad es. your@email.com) O sull'etichetta del campo (ad es. Email) E aggiungi una classe chiamata focus-selectai tuoi input:

<input type="text" name="email" class="focus-select" value="your@email.com">
<input type="password" name="password" class="focus-select" value="password">

Ed ecco il jQuery:

$(document).on('click', '.focus-select', function(){
  $(this).select();
});

Non riesco davvero a vedere Chrome che fa mai casino con i valori. Sarebbe folle. Quindi speriamo che questa sia una soluzione sicura.

Opzione 2: imposta il valore dell'e-mail su uno spazio, quindi eliminalo

Supponendo di avere due input, come e-mail e password, impostare il valore del campo e-mail su " "(uno spazio) e aggiungere l'attributo / valore autocomplete="off", quindi deselezionarlo con JavaScript. È possibile lasciare vuoto il valore della password.

Se l'utente non ha JavaScript per qualche motivo, assicurati di tagliare il suo lato server di input (probabilmente dovresti esserlo comunque), nel caso in cui non eliminasse lo spazio.

Ecco il jQuery:

$(document).ready(function() {
  setTimeout(function(){
    $('[autocomplete=off]').val('');
  }, 15);
});

Ho impostato un timeout 15perché 5sembrava funzionare occasionalmente nei miei test, quindi triplicare questo numero sembra una scommessa sicura.

Se non si imposta il valore iniziale su uno spazio, Chrome lascia l'input come giallo, come se lo avesse riempito automaticamente.

Opzione 3: input nascosti

Metti questo all'inizio del modulo:

<!-- Avoid Chrome autofill -->
<input name="email" class="hide">

CSS:

.hide{ display:none; }

Assicurati di conservare la nota HTML in modo che gli altri sviluppatori non la cancellino! Assicurati anche che il nome dell'input nascosto sia pertinente.


@Vaia - hai provato a navigare in un'altra pagina e quindi a premere il pulsante Indietro? Ottengo risultati contrastanti - potrebbe essere necessario modificare.
Rybo111,

Non ho provato l'opzione 1 se intendi quello. Inoltre, avevo solo bisogno di disabilitare il riempimento automatico su un modale caricato ajax che non verrà chiamato con il pulsante Indietro. Ma se ci saranno altri risultati, te lo dirò. @ rybo111
AlexioVay,

@Vaia intendevo l'opzione 2 - rispondi qui se riscontri problemi. Grazie.
rybo111,

15

Usa css text-security: disc senza usare type = password .

html

<input type='text' name='user' autocomplete='off' />
<input type='text' name='pass' autocomplete='off' class='secure' />

or

<form autocomplete='off'>
    <input type='text' name='user' />
    <input type='text' name='pass' class='secure' />
</form>

css

input.secure {
    text-security: disc;
    -webkit-text-security: disc;
}

miglior approccio che ho trovato finora! bene, almeno per Chrome 64: /
scipper

Per i miei scopi questo è perfetto, grazie! Chrome non lo compila automaticamente o lo completa automaticamente, non offre di salvarlo e non solo è oscurato dalla vista ma anche dagli appunti - Ho copiato quello che avevo digitato e incollato nel blocco note e ho appena ottenuto "••• ••••••••". Brillante!
Doug McLean,

15

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 automatico è quello di assegnare una stringa casuale all'attributo , ad esempio:

autocomplete="nope"

RE: "comportamento imprevisto" Questo comportamento è spinto da Google che crede di conoscere meglio degli sviluppatori come dovrebbe funzionare ogni singola pagina. A volte voglio solo inserire una password grezza, zero fronzoli.
Regolare Joe

3
questa combinazione FINALMENTE ha funzionato per me: role = "presentation" autocomplete = "nope" testato su Chrome Versione 64.0.3282.186 (build ufficiale) (64 bit). Che incubo!
Billy Jean,

2
La stringa casuale funziona per Chrome ma non Firefox. Per completezza uso sia "autocomplete = 'off-no-complete'" e setto l'attributo readonly con un onfocus = "this.readOnly = false". La mia app è un'applicazione aziendale che gli utenti usano per inserire migliaia di indirizzi, quindi il caso d'uso per controllarlo è reale - posso anche garantire l'uso di Javascript, quindi almeno ho quello che fa per me
ChronoFish

13

Ho scoperto che l'aggiunta di questo a un modulo impedisce a Chrome di utilizzare il riempimento automatico.

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>

Trovato qui https://code.google.com/p/chromium/issues/detail?id=468153#hc41

Davvero deludente che Chrome abbia deciso di sapere meglio dello sviluppatore su quando completare il Completamento automatico. Ha una vera atmosfera Microsoft.


Non è proprio il fatto che dici PreventChromeAutocomplete. Sono stato in grado di far funzionare il completamento automatico dicendo autocomplete = "off" e name = "somename". Questo funziona solo se si nominano due input diversi con lo stesso nome. Quindi nel tuo caso PreventChromeAutocomplete deve essere stato applicato a due input diversi. Molto strano ...
Joe Heyming,

11
<input readonly onfocus="this.removeAttribute('readonly');" type="text">

l'aggiunta dell'attributo readonly al tag insieme all'evento onfocus rimuovendolo risolve il problema


Questa soluzione funziona su campi di testo
Denis Slonovschi

9

Per le combinazioni di password nome utente questo è un problema facile da risolvere. L'euristica di Chrome cerca il modello:

<input type="text">

seguito da:

<input type="password">

Basta interrompere questo processo invalidando questo:

<input type="text">
<input type="text" onfocus="this.type='password'">

Sfortunatamente, questo si applica a qualcosa di più del semplice nome utente / password. Chrome esaminerà il testo segnaposto per dedurre cosa suggerire. Ad esempio: jsbin.com/jacizu/2/edit
kentcdodds

È valido che sarai ancora in grado di riempire i campi con i suggerimenti del browser, come dimostra il tuo esempio, quindi questo non risolve davvero il problema dei PO. Questa soluzione, impedisce al browser di popolare "automaticamente" combinazioni di nome utente e password come nell'esempio della risposta principale. Questo potrebbe essere utile ad alcuni, ma non è una soluzione definitiva alla sola disabilitazione del completamento automatico, che dovrà provenire da Google.
Bernesto,

4
Tuttavia, se aggiungi uno spazio davanti al testo del segnaposto disabiliterà anche il suggerimento automatico basato sul segnaposto. Sicuramente un trucco, anche se non più degli altri suggerimenti. jsbin.com/pujasu/1/edit
Bernesto

in realtà ... sembrava funzionare per il tuo esempio, ma per qualche ragione non funziona per me :-(
kentcdodds

Ha! Ecco perché si chiama hack ... Hai un esempio che puoi condividere dove non funziona?
Bernesto,

8

Mike Nelsons ha fornito la soluzione non funzionava per me in Chrome 50.0.2661.102 m. Semplicemente aggiungendo un elemento di input dello stesso tipo con display: none set non disabilita più il completamento automatico del browser nativo. È ora necessario duplicare l'attributo name del campo di input su cui si desidera disabilitare il completamento automatico.

Inoltre, per evitare di duplicare il campo di input quando si trovano all'interno di un elemento del modulo, è necessario posizionare un elemento disabilitato sull'elemento che non viene visualizzato. Ciò impedirà che tale elemento venga inviato come parte dell'azione del modulo.

<input name="dpart" disabled="disabled" type="password" style="display:none;">
<input name="dpart" type="password">
<input type="submit">

Per quanto riguarda giugno 2016 e Chrome 51.0.2704.106 m questa è l'unica soluzione funzionante qui
Denis

Ma il modulo selezionerà il campo di input (visibile) giusto di cui hai bisogno? Perché è lo stesso nome.
AlexioVay

@Vaia, l'aggiunta dell'attributo disabilitato all'elemento duplicato impedirà che venga inviato.
McCainz,

8

Nel 2016 Google Chrome ha iniziato a ignorare autocomplete=offsebbene sia nel W3C. La risposta che hanno pubblicato :

La parte difficile qui è che da qualche parte lungo il percorso del web il completamento automatico = off diventa un valore predefinito per molti campi del modulo, senza che si pensi al fatto che ciò sia positivo per gli utenti. Ciò non significa che non ci siano casi molto validi in cui non si desidera che i dati di compilazione automatica del browser (ad esempio sui sistemi CRM), ma nel complesso, li consideriamo come casi di minoranza. Di conseguenza, abbiamo iniziato a ignorare il completamento automatico = off per i dati di Compilazione automatica di Chrome.

Il che in sostanza dice: sappiamo meglio cosa vuole un utente.

Hanno aperto un altro bug per pubblicare casi d'uso validi quando è richiesto il completamento automatico = off

Non ho riscontrato problemi connessi al completamento automatico in tutta la mia applicazione B2B, ma solo con l'inserimento di un tipo di password.

Riempi automaticamente se c'è un campo password sullo schermo anche nascosto. Per rompere questa logica, puoi mettere ogni campo password nella sua forma se non rompe la tua logica di pagina.

<input type=name >

<form>
    <input type=password >
</form>

4
Dato che la tua risposta è la più recente, potresti aggiungere che l'aggiunta autocomplete="pineapple"o qualche altra incomprensibile sembra anche risolvere il problema? Almeno, è successo dalla mia parte!
Douwe de Haan,

1
@DouwedeHaan va bene fino a quando il modulo non viene salvato, quindi il completamento automatico fornirà consigli per il campo 'ananas' salvato. Ma forse usare un hash casuale per il valore di completamento automatico, ad esempio, potrebbe aggirare questo?
scavare il

@digout Sono d'accordo. Un buon esempio sarebbe di usare l'UUID per questo tipo di cose. Assicurati solo che la stringa sia unica!
Douwe de Haan,

7

Se hai problemi con il mantenimento dei segnaposto ma disabilitando il riempimento automatico di Chrome ho trovato questa soluzione alternativa.

Problema

HTML

<div class="form">
    <input type="text" placeholder="name"><br>
    <input type="text" placeholder="email"><br>
    <input type="text" placeholder="street"><br>
</div>

http://jsfiddle.net/xmbvwfs6/1/

L'esempio sopra produce ancora il problema di compilazione automatica, ma se usi il required="required"CSS e alcuni CSS puoi replicare i segnaposto e Chrome non raccoglierà i tag.

Soluzione

HTML

<div class="form">
    <input type="text" required="required">
    <label>Name</label>  
    <br>
    <input type="text" required="required">
    <label>Email</label>    
    <br>
    <input type="text" required="required">
    <label>Street</label>    
    <br>
</div>

CSS

input {
    margin-bottom: 10px;
    width: 200px;
    height: 20px;
    padding: 0 10px;
    font-size: 14px;
}
input + label {
    position: relative;
    left: -216px;
    color: #999;
    font-size: 14px;
}
input:invalid + label { 
    display: inline-block; 
}
input:valid + label { 
    display: none; 
}

http://jsfiddle.net/mwshpx1o/1/


Questa è l'unica soluzione che funziona davvero. Non mi piace davvero, ma questo è lo stato scadente in cui ci troviamo adesso :-(
kentcdodds

A partire dal 2017, questo funziona ancora bene. Ha solo bisogno di questo script per forzare lo stato inputattivo se l'utente fa clic sul segnaposto "falso": $("label").on("click",function(){ $(this).prev().focus(); });Nota che labelnon può essere prima che input... Chrome lo trovi! Bella soluzione creativa! +1
Louys Patrice Bessette

7

Non mi piaceva davvero fare campi nascosti, penso che renderlo così diventerà molto confuso molto velocemente.

Sui campi di input che si desidera interrompere dal completamento automatico funzionerà. Rendi i campi di sola lettura e, a fuoco, rimuovi questo attributo in questo modo

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

quello che fa è che devi prima rimuovere l' attributo di sola lettura selezionando il campo e in quel momento molto probabilmente sarai popolato con il tuo input dell'utente e chinando il riempimento automatico per prendere il controllo


1
Sfortunatamente, questo non funziona più :-( jsbin.com/sobise/edit?html,css,output
kentcdodds

7

I valori immessi in precedenza memorizzati nella cache di Chrome vengono visualizzati come elenco di selezione a discesa. Questo può essere disabilitato con il completamento automatico = off, l'indirizzo salvato esplicitamente nelle impostazioni avanzate di Chrome fornisce il popup di riempimento automatico quando viene attivato un campo indirizzo. Questo può essere disabilitato con il completamento automatico = "false" Ma consentirà a Chrome di visualizzare i valori memorizzati nella cache nel menu a discesa.

Su un campo html di input che segue si spengono entrambi.

Role="presentation" & autocomplete="off"

Durante la selezione dei campi di input per la compilazione automatica dell'indirizzo Chrome ignora quei campi di input che non hanno l'elemento html etichetta precedente.

Per garantire che il parser Chrome ignori un campo di input per il popup dell'indirizzo di riempimento automatico, è possibile aggiungere un pulsante nascosto o un controllo immagine tra etichetta e casella di testo. Ciò interromperà la sequenza di analisi cromata della creazione della coppia di etichette in ingresso per il riempimento automatico. Le caselle di controllo vengono ignorate durante l'analisi dei campi indirizzo

Chrome considera anche l'attributo "for" sull'elemento etichetta. Può essere utilizzato per interrompere la sequenza di analisi di Chrome.


Ti amo. L'unica soluzione in questa pagina che funziona davvero.
Giorno Davis Waterbury,

Non funziona nell'anno 2020.
Kai Noack,

7

Bene, dato che tutti abbiamo questo problema, ho investito del tempo per scrivere un'estensione jQuery funzionante per questo problema. Google deve seguire il markup html, non seguiamo Google

(function ($) {

"use strict";

$.fn.autoCompleteFix = function(opt) {
    var ro = 'readonly', settings = $.extend({
        attribute : 'autocomplete',
        trigger : {
            disable : ["off"],
            enable : ["on"]
        },
        focus : function() {
            $(this).removeAttr(ro);
        },
        force : false
    }, opt);

    $(this).each(function(i, el) {
        el = $(el);

        if(el.is('form')) {
            var force = (-1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable))
            el.find('input').autoCompleteFix({force:force});
        } else {
            var disabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable);
            var enabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.enable);
            if (settings.force && !enabled || disabled)
                el.attr(ro, ro).focus(settings.focus).val("");
        }
    });
};
})(jQuery);

Aggiungilo a un file come /js/jquery.extends.js e includilo oltre jQuery. Applicalo a ciascun elemento del modulo al caricamento del documento in questo modo:

$(function() {
    $('form').autoCompleteFix();
});

jsfiddle con i test


6

Prova il seguente jQuerycodice che ha funzionato per me.

if ($.browser.webkit) {
    $('input[name="password"]').attr('autocomplete', 'off');
    $('input[name="email"]').attr('autocomplete', 'off');
}

fantastiche soluzioni fantastiche
DKR

Puoi semplicemente aggiungere autocomplete="off"al campo di input invece di usare jquery. E a proposito, questo non funziona. I suggerimenti per la password di Chrome vengono ancora visualizzati.
Kai Noack,

6

Ci sono due pezzi per questo. Chrome e altri browser memorizzeranno i valori precedentemente immessi per i nomi dei campi e forniranno all'utente un elenco di completamento automatico in base a ciò (in particolare, gli input del tipo di password non vengono mai ricordati in questo modo, per motivi abbastanza ovvi). Puoi aggiungere autocomplete="off"per evitare ciò su cose come il tuo campo e-mail.

Tuttavia, hai quindi compilatori di password. La maggior parte dei browser ha le proprie implementazioni integrate e ci sono anche molte utility di terze parti che forniscono questa funzionalità. Questo, non puoi fermarti. Questo è l'utente che fa la propria scelta per salvare queste informazioni da compilare automaticamente in un secondo momento ed è completamente al di fuori dell'ambito e della sfera di influenza dell'applicazione.


La prima parte di questa risposta non sembra più essere vera: Chrome Bug
Joshua Drake

Non sono sicuro di cosa stai parlando. Quel "bug" è solo un segnaposto per Chromium per cui raccogliere i casi d'uso delle persone autocomplete="off". È possibile che l'intenzione sia quella di rimuoverlo, ma ciò non è mai stato esplicitamente dichiarato, e non c'è certamente nulla che richieda quel salto mentale. Potrebbero semplicemente voler prendere in considerazione modi alternativi o migliori per trattarlo. Indipendentemente da ciò, fa ancora parte delle specifiche e, di nuovo, nessuna indicazione che lascerà le specifiche neanche. E funziona ancora in tutti i browser per quanto ne so, incluso Chrome.
Chris Pratt,

Abbiamo un paio di casi in cui autocomplete = "off" non viene rispettato da Chrome.
Joshua Drake,

1. Un paio di casi aneddotici non equivalgono a prove. 2. Come ho detto nella mia risposta, le estensioni di compilazione dei moduli e simili potrebbero non e spesso non lo rispettano. Alla fine, come tutte le cose, dipende dal cliente e quindi dall'utente. Tutto quello che puoi fare è suggerire che non dovrebbe essere compilato automaticamente.
Chris Pratt,


6

Impostando autocompletesu offdovrebbe funzionare qui ho un esempio che viene utilizzato da Google nella pagina di ricerca. Ho trovato questo da ispezionare elemento.

inserisci qui la descrizione dell'immagine

modifica : se offnon funziona, prova falseo nofill. Nel mio caso funziona con la versione 48.0 di Chrome


5

Ecco un trucco sporco -

Hai il tuo elemento qui (aggiungendo l'attributo disabilitato):

<input type="text" name="test" id="test" disabled="disabled" />

E poi in fondo alla tua pagina web metti un po 'di JavaScript:

<script>
    setTimeout(function(){
        document.getElementById('test').removeAttribute("disabled");
        },100);
</script>

5

Soluzione diversa, basata su webkit. Come già accennato, ogni volta che Chrome trova un campo password completa automaticamente l'e-mail. AFAIK, questo è indipendentemente dal completamento automatico = [qualunque cosa].

Per aggirare questo, modificare il tipo di input in testo e applicare il carattere di sicurezza del webkit in qualsiasi forma desiderata.

.secure-font{
-webkit-text-security:disc;}

<input type ="text" class="secure-font">

Da quello che posso vedere questo è sicuro almeno quanto input type = password, è copia e incolla sicuro. Tuttavia è vulnerabile rimuovendo lo stile che rimuoverà gli asterischi, ovviamente input = password può essere facilmente cambiata in input type = testo nella console per rivelare eventuali password compilate automaticamente, quindi è praticamente lo stesso.


Grazie! Questa è l'unica cosa che funziona in Chrome 49. I metodi precedenti si sono rotti poiché Chrome sembra riempire tutti gli input con type="password"ora.
epelc

4

L'unico modo per me era: (richiesto jQuery)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});

4

Ho affrontato lo stesso problema. Ed ecco la soluzione per disabilitare la compilazione automatica di nome utente e password su Chrome (appena testato solo con Chrome)

    <!-- Just add this hidden field before password as a charmed solution to prevent auto-fill of browser on remembered password -->
    <input type="tel" hidden />
    <input type="password" ng-minlength="8" ng-maxlength="30" ng-model="user.password" name="password" class="form-control" required placeholder="Input password">

strana correzione ma in qualche modo questa è l'unica cosa che funziona per me su Chrome 48 :)
Jacka,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.