Come si disabilita il completamento automatico del browser sul campo del modulo Web / tag di input?


2793

Come si disabilita autocompletenei principali browser per uno specifico input(o form field)?


2
In alcuni sistemi in cui i tester devono inserire manualmente molte informazioni ripetutamente, può essere utile avere l'opzione come configurabile in modo che durante il test sia possibile disabilitarla e premere semplicemente 'tab> freccia giù> scheda> freccia giù ecc. . '
Simon_Weaver,

Risposte:


2626

Firefox 30 ignora le autocomplete="off"password, scegliendo invece di chiedere all'utente se la password deve essere archiviata sul client. Nota il seguente commento del 5 maggio 2014:

  • Il gestore password richiede sempre se desidera salvare una password. Le password non vengono salvate senza il permesso dell'utente.
  • Siamo il terzo browser che implementa questa modifica, dopo IE e Chrome.

Secondo la documentazione di Mozilla Developer Network , l'attributo dell'elemento del modulo booleano autocompleteimpedisce la memorizzazione nella cache dei dati del modulo nei browser meno recenti.

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

45
Questo non ha funzionato per me in Firefox 3.0.3 Ho dovuto inserire l'attributo di completamento automatico in FORM piuttosto che INPUT.
Winston Fassett,

17
Il completamento automatico è definito solo negli standard HTML 5, quindi interromperà le convalide eseguite su HTML 4. * ...
Jrgns,

96
@ Winston, dovresti metterlo sia sul modulo, sia sull'elemento di input stesso. In questo modo si copre tutta la non standardità dei browser.
AviD,

83
E ricorda di disabilitare l' estensione = = completamento automatico (se stai utilizzando Chrome) prima di testare la tua webapp. Altrimenti ti sentirai davvero sciocco come me. ;)
Jo Liss,


314

Inoltre autocomplete=off, potresti anche rendere casuali i nomi dei campi del modulo in base al codice che genera la pagina, magari aggiungendo una stringa specifica della sessione alla fine dei nomi.

Quando il modulo viene inviato, è possibile rimuovere quella parte prima di elaborarli sul lato server. Ciò impedirebbe al browser Web di trovare un contesto per il proprio campo e potrebbe anche aiutare a prevenire gli attacchi XSRF perché un utente malintenzionato non sarebbe in grado di indovinare i nomi dei campi per l'invio di un modulo.


10
Questa è una soluzione molto migliore rispetto all'utilizzo del completamento automatico = "off". Tutto quello che devi fare è generare un nuovo nome su ogni caricamento della pagina e salvarlo in $ _SESSION per un uso futuro:$_SESSION['codefield_name'] = md5(uniqid('auth', true));
incantare il

78
No, questa non è una soluzione migliore, perché l'origine della preferenza per questa impostazione è l'agente utente noto anche come browser web. C'è una differenza tra supportare determinati comportamenti (che HTML 5 tenta di fare) e forzarli decidendo per conto dell'utente, che tu suggerisci sia una "soluzione molto migliore".
AMN

15
Questa soluzione può funzionare con tutti i browser, quindi sotto questo aspetto è "migliore". Tuttavia, amn ha ragione, decidere di disabilitare il completamento automatico per conto dei tuoi utenti non è una buona idea. Ciò significa che disabiliterei il completamento automatico solo in situazioni molto specifiche, come quando prevedi di costruire la tua funzionalità di completamento automatico e non voglio conflitti o comportamenti strani.
macguru2000,

8
Per quanto riguarda gli attacchi XSRF, non sono sicuro del tipo di attacco che stavi immaginando, ma l'attaccante non potrebbe semplicemente rimuovere la parte finale nello stesso modo in cui fai sul lato server per identificare i campi? O se l'attaccante sta pubblicando i campi, non potrebbe aggiungere la propria stringa casuale poiché verrà rimossa dal server?
xr280xr,

9
@ macguru2000 costruire il tuo completamento automatico è un caso d'uso completamente legittimo e comune. In realtà il browser dovrebbe rendere più semplice per gli sviluppatori la disattivazione del completamento automatico quando è necessario invece di costringerci a utilizzare hack come questo
whoadave

235

La maggior parte dei principali browser e gestori di password (correttamente, IMHO) ora ignorano autocomplete=off.

Perché? Molte banche e altri siti Web di "alta sicurezza" sono stati aggiunti autocomplete=offalle loro pagine di accesso "per motivi di sicurezza", ma ciò in realtà riduce la sicurezza poiché consente alle persone di modificare le password su questi siti ad alta sicurezza per essere facili da ricordare (e quindi rompere) dal completamento automatico era rotto.

Molto tempo fa la maggior parte dei gestori di password ha iniziato a ignorare autocomplete=offe ora i browser stanno iniziando a fare lo stesso solo per gli input di nome utente / password.

Sfortunatamente, i bug nelle implementazioni del completamento automatico inseriscono informazioni su nome utente e / o password nei campi del modulo inappropriati, causando errori di convalida del modulo, o peggio ancora, inserendo accidentalmente nomi utente in campi che sono stati lasciati intenzionalmente vuoti dall'utente.

Cosa deve fare uno sviluppatore web?

  • Se riesci a mantenere tutti i campi password su una pagina da soli, è un ottimo inizio in quanto sembra che la presenza di un campo password sia il principale fattore scatenante per l'avvio dell'utente / completamento automatico. Altrimenti, leggi i suggerimenti di seguito.
  • Safari nota che ci sono 2 campi password e disabilita il completamento automatico in questo caso, supponendo che debba essere un modulo di modifica della password, non un modulo di accesso. Quindi assicurati di usare 2 campi password (nuovi e confermare nuovi) per tutti i moduli in cui lo consenti
  • Chrome 34, sfortunatamente, proverà a compilare automaticamente i campi con user / pass ogni volta che vedrà un campo password. Questo è piuttosto un brutto bug che, si spera, cambieranno il comportamento di Safari. Tuttavia, l'aggiunta di questo nella parte superiore del modulo sembra disabilitare la compilazione automatica della password:

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

Non ho ancora studiato a fondo IE o Firefox, ma sarò felice di aggiornare la risposta se altri hanno informazioni nei commenti.


5
cosa intendi con "l'aggiunta di questo alla tua pagina sembra disabilitare il riempimento automatico per la pagina:"
wutzebaer

5
@wutzebaer, Chrome nota il campo della password nascosta e interrompe il completamento automatico. Secondo quanto riferito, ciò impedisce al sito di rubare informazioni sulla password senza che l'utente se ne accorga.
David W,

6
Il tuo frammento di codice impedisce i completamenti automatici per i campi di accesso su Chrome, Firefox, IE 8 e IE 10. Non ho testato IE 11. Roba buona! Solo una semplice risposta che funziona ancora.
Sam Watkins,

3
La tua nota safari sembra funzionare anche su Chrome, almeno a partire da dicembre 2015. Avevo un campo nome utente e password in un modulo di registrazione che stava completando automaticamente con i dati dal modulo di accesso. La creazione di due type='password'campi su una pagina ha fatto sì che il completamento automatico della "password salvata" del browser venisse ignorato, il che ha avuto un sacco di senso poiché i moduli di registrazione tendono a chiedere la password due volte quando i moduli di accesso lo richiedono solo una volta.
Matt Fletcher,

3
Sembra non funzionare più in Chrome 55, a meno che il campo della password aggiuntiva non sia nascosto, il che vanifica lo scopo.
jokkedk,

160

A volte = anche autocomplete off sarebbe non impedisce di riempire le credenziali in campi sbagliati, ma non campo soprannome utente o.

Questa soluzione alternativa si aggiunge al post di Apinstein sul comportamento del browser.

correggi il riempimento automatico del browser in sola lettura e imposta il focus scrivibile (clic e scheda)

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

Aggiornamento: Mobile Safari imposta il cursore nel campo, ma non mostra la tastiera virtuale. La nuova correzione 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

Perché il browser riempie automaticamente le credenziali nel campo di testo sbagliato !?

Ho notato 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 riempie automaticamente (solo indovinando a causa dell'osservazione) il campo di input simile al testo più vicino, che appare prima del campo della password in DOM. Poiché il browser è l'ultima istanza e non puoi controllarlo,

Questa soluzione di sola lettura sopra ha funzionato per me.


8
Se non è presente JavaScript, l'intero modulo non riesce. -1
Jimmy Kane,

8
@JimmyKane la chiave sarebbe quella di aggiungere anche l'attributo usando javascript in primo luogo (cosa che dsuess non ha fatto qui, ma semplicemente per completezza).
Trnelson,

@tmelson Capisco, ma ancora perché usare js per disabilitare? Evitiamo js per cose che possono essere migliorate in modo nativo. Ancora una volta sono d'accordo con te.
Jimmy Kane,

3
Questo non funziona proprio in IE8, il campo di sola lettura della password non è modificabile la prima volta che lo metti a fuoco, solo dopo aver messo a fuoco e messo nuovamente a fuoco. Bella idea, ma purtroppo è un po 'troppo confusa e non sicura da usare.
Sam Watkins,

Questo non funziona correttamente su tutti i browser (ad es. IE 11 e IE Edge). Non appena readonlyviene rimosso, la successiva selezione del campo comporta il ritorno del completamento automatico.
Codice finito il

106
<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

Funzionerà in Internet Explorer e Mozilla FireFox, il rovescio della medaglia è che non è lo standard XHTML.


Ho notato che aggiungerlo all'elemento modulo non impedisce sempre che venga applicato ai singoli input all'interno del modulo. Pertanto è probabilmente meglio posizionarlo direttamente sull'elemento di input.
Sholsinger,

15
In realtà @sholsinger, è meglio metterlo sia sul modulo, sia sull'elemento di input stesso. In questo modo si copre tutta la non standardità dei browser.
AviD,

2
Purtroppo, a partire da IE 11, Microsoft non lo rispetta più per input type="password". Spero che nessun altro browser scelga di rimuovere questa funzionalità.
SamHuckaby,

L'impostazione autocomplete="off"su formè l'unica cosa che ha funzionato per Chrome.
Andrew,

106

La soluzione per Chrome è aggiungere autocomplete="new-password"alla password del tipo di input. Si prega di controllare l'esempio seguente.

Esempio:

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

Chrome completa sempre automaticamente i dati se trova una casella di tipo password , quanto basta per indicare quella casella autocomplete = "new-password".

Questo funziona bene per me.

Nota: assicurati F12che le modifiche abbiano effetto, molte volte i browser salvano la pagina nella cache, questo mi ha fatto una cattiva impressione che non funzionasse, ma il browser non ha effettivamente apportato le modifiche.


2
Funziona in Chrome anche per altri tipi di campi, non solo type = "password".
Jake,

L'ho usato con password, e-mail e tipi di testo e ha funzionato. L'ho usato semplicemente in questo modo: autocomplete = "new"
Crak_mboutin

autocomplete = "nope" name = "pswd" e utilizzato <input name = "dummyPassword" type = "password" style = "display: none;"> prima del campo di immissione della password reale. Questo ha funzionato per me.
Denuka,


Ora funziona in quasi tutti i browser, non solo in Chrome: completamento automatico # Browser_compatibility .
Andrew Morton,

60

Come altri hanno già detto, la risposta è autocomplete="off"

Tuttavia, penso che valga la pena affermare perché è una buona idea usarlo in alcuni casi poiché alcune risposte a questo e domande duplicate hanno suggerito che è meglio non spegnerlo.

L'arresto dei browser che memorizzano i numeri delle carte di credito non deve essere lasciato agli utenti. Troppi utenti non si accorgeranno nemmeno che è un problema.

È particolarmente importante disattivarlo nei campi per i codici di sicurezza della carta di credito. Come afferma questa pagina :

"Non memorizzare mai il codice di sicurezza ... il suo valore dipende dalla presunzione che l'unico modo per fornirlo sia leggerlo dalla carta di credito fisica, dimostrando che la persona che lo fornisce detiene effettivamente la carta."

Il problema è che, se si tratta di un computer pubblico (cyber café, biblioteca ecc.), È facile per gli altri utenti rubare i dettagli della tua carta e anche sul tuo computer un sito Web dannoso potrebbe rubare i dati di completamento automatico .


7
se andassi su un sito e mi ricordassi della mia carta nel menu a discesa sarei molto infelice. comincio a chiedermi come potrebbero essere così imprudenti.
Simon_Weaver,

9
Caso molto più semplice / più critico. Quando visito la pagina di un utente nella parte di amministrazione del mio sito, tenta di impostare il nome utente e la password come nome utente e password di amministratore, non potendo dire che questo non è un modulo di accesso. Voglio che la mia password amministratore sia ricordata, ma è un errore critico che tenta di applicare quel nome utente / password ricordati a tutti gli utenti che poi modifico.
rjmunro,

34

Ho risolto la lotta senza fine con Google Chrome con l'uso di personaggi casuali. Quando esegui sempre il rendering con completamento casuale con stringa casuale, non ricorderà mai nulla.

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

Spero che possa aiutare altre persone.


2
Funziona ancora meglio. È possibile aggiungere un piccolo JS che genera un codice casuale per ogni caricamento della pagina e aggiungere quel codice nel campo di input: <code> function autoId () {var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; per (var i = 0; i <12; i ++) {autoId + = dict.charAt (Math.floor (Math.random () * dict.length)); } return autoId; } $ ('. autocompleteoff'). attr ('autocomplete', autoId ()); </code> Puoi aggiungere la autocompleteoffclasse al campo di input desiderato.
Raghuram Kasyap,

non funziona nella mia versione di Chrome 68.0.3440.106 (build ufficiale) (64 bit)
Sukanya Purushothaman

Chrome è stato corretto per utilizzare lo standard "off" ora
MacK

1
Purtroppo funziona meglio di quello che viene chiamato standard su Chrome
Nour Lababidi

1
Oggi ho scoperto che Chrome sovrascriverà la stringa casuale con "Off". Non riesco a credere che gli sviluppatori di Chrome che fanno questo attributo male e senza controllo. Perché ohh il mio.
passaggio

33

Dovrei supplicare di dissentire da quelle risposte che dicono per evitare di disabilitare il completamento automatico.

La prima cosa da evidenziare è che il completamento automatico non disabilitato esplicitamente nei campi del modulo di accesso è un errore PCI-DSS. Inoltre, se la macchina locale di un utente è compromessa, tutti i dati di completamento automatico possono essere banalmente ottenuti da un utente malintenzionato a causa della sua memorizzazione in chiaro.

C'è sicuramente un argomento per l'usabilità, tuttavia c'è un ottimo equilibrio quando si tratta di quali campi del modulo dovrebbero essere disabilitati per il completamento automatico e quali no.


Mi è appena venuto in mente che IE non attiva eventi onChange quando si riempie un input di testo usando il completamento automatico. Abbiamo dozzine di moduli e oltre un migliaio di eventi onChange (convalide di input, logica aziendale) sparsi su di essi. Di recente abbiamo aggiornato IE a una versione più recente e all'improvviso hanno iniziato a succedere cose strane. Fortunatamente stiamo eseguendo un'app Intranet e il completamento automatico non è un problema UX per noi, è più semplice disattivarlo.
Robotron,

3
Se un computer locale degli utenti è compromesso, vengono avvitati, punto. Potrebbe avere un keylogger installato, potrebbe avere un falso certificato radice SSL aggiunto e tutto ciò che viene inviato attraverso un falso proxy ecc. Ho un vero motivo per disabilitare il completamento automatico - Quando accedo come amministratore e visito la pagina di modifica dell'utente, assegna quell'utente il mio nome utente e la mia password di amministratore. Devo prevenire questo comportamento.
rjmunro,

1
I venditori di browser sembrano cercare i propri interessi. Password salvate = blocco utente. E l'attivazione / disattivazione del completamento automatico era troppo semplice - perché non uno standard complesso di suggerimenti semantici ( html.spec.whatwg.org/multipage/… ) che, tra l'altro, consente al browser di raccogliere preziosi dati semantici dai siti ciascuno visite degli utenti?
aro_tech,

il caso d'uso specifico che sto cercando di risolvere è questo: sono già connessi. Ma ora stanno per accedere a qualcosa di ancora più sensibile. Voglio mostrare un dialogo che li rianimi, contro la possibilità che se ne siano andati per fumare e che una persona cattiva si sia seduta sulla sedia. ho provato diverse tecniche per sconfiggere il completamento automatico e nulla funziona. ora sto pensando, forse, almeno, di usare il buon vecchio "password = window.prompt (" Ti preghiamo di reinserire la tua password ")" più il nome utente nella sessione, e provare ad autenticarlo.
David,

31

Tre opzioni: prima:

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

Secondo:

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

Terzo (codice javascript):

$('input').attr('autocomplete', 'off');

2
La prima e la seconda opzione dovrebbero essere un'opzione, poiché variano a seconda di come gestiscono i browser.
Rybo111,

Ho provato $ formElement.attr ('completamento automatico', 'off'); e non funziona.
Ben Sinclair,

22

Su una nota correlata o in realtà, sulla nota completamente opposta -

"Se sei l'utente del modulo sopra menzionato e desideri riattivare la funzionalità di completamento automatico, usa il bookmarklet" Ricorda password "da questa pagina dei bookmarklet . Rimuove tutti gli autocomplete="off"attributi da tutti i moduli della pagina. Continua a combattere! "


20

In realtà abbiamo usato l'idea di sasb per un sito. Era un'app web di software medico per gestire l'ufficio di un medico. Tuttavia, molti dei nostri clienti erano chirurghi che utilizzavano molte stazioni di lavoro diverse, compresi i terminali semi-pubblici. Quindi, volevano assicurarsi che un medico che non capisse le implicazioni delle password salvate automaticamente o che non prestasse attenzione non possa accidentalmente lasciare le loro informazioni di accesso facilmente accessibili. Naturalmente, questo era prima dell'idea della navigazione privata che stava iniziando a essere presente in IE8, FF3.1, ecc. Anche così, molti medici sono costretti a utilizzare i browser della vecchia scuola negli ospedali con IT che non cambierà.

Quindi, abbiamo avuto la pagina di accesso generare nomi di campi casuali che avrebbero funzionato solo per quel post. Sì, è meno conveniente, ma sta solo colpendo l'utente per non memorizzare le informazioni di accesso sui terminali pubblici.


20

Nessuna delle soluzioni ha funzionato per me in questa conversazione.

Alla fine ho capito una soluzione HTML pura che non richiede Javascript , funziona nei browser moderni (tranne IE; ci doveva essere almeno 1 cattura, giusto?), E non richiede di disabilitare il completamento automatico per l'intero modulo.

Basta disattivare il completamento automatico sul forme quindi accenderlo per qualsiasi inputsi desideri che funzioni all'interno del modulo. Per esempio:

<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>

Questo era totalmente quello che stavo cercando!
Marco

20

Basta impostare autocomplete="off". C'è un ottimo motivo per farlo: vuoi fornire la tua funzionalità di completamento automatico!


20

Ho provato infinite soluzioni, e poi ho trovato questo:

Invece di autocomplete="off"usare semplicementeautocomplete="false"

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


Come hai detto in Chrome, il valore off non funziona. Deve essere "falso"
azuax,

Funziona per me su Chrome 44.0.2403.130.
GuiGS,

1
Ho provato questo: $ formElement.attr ('completamento automatico', 'falso'); scusa non funziona.
Ben Sinclair,

20

Questo funziona per me.

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

Possiamo anche usare questa strategia in altri controlli come testo, selezionare ecc


questa dovrebbe essere l'ultima risposta. l'unica risposta che funziona per me nell'ultimo chrome
Nick Chan Abdullah,

19

Penso che autocomplete=offsia supportato in HTML 5.

Chiediti perché vuoi farlo, tuttavia, potrebbe avere senso in alcune situazioni, ma non farlo solo per il gusto di farlo.

È meno conveniente per gli utenti e nemmeno un problema di sicurezza in OS X (menzionato da Soren di seguito). Se sei preoccupato per le persone che hanno rubato le loro password in remoto, un registratore di tasti potrebbe comunque farlo anche se l'app viene utilizzata autcomplete=off.

Come utente che sceglie di avere un browser che ricorda (la maggior parte) delle mie informazioni, troverei fastidioso se il tuo sito non ricordasse il mio.


17

Inoltre

autocomplete="off"

Uso

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

per gli ingressi che non si desidera loro di ricordare i dati dei moduli ( username, password, ecc) come mostrato di seguito:

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

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

Spero che sia di aiuto.


1
Per me in IE11 non riesco a digitare nella casella di testo anche dopo che onfocus ha rimosso l'attributo readonly. Tuttavia, se faccio clic una seconda volta sulla casella di testo, posso digitare.
Mcallahan,

Ho riscontrato lo stesso problema con IE11 (non riesco a digitare fino al secondo focus). L'aggiunta di una sfocatura e la messa a fuoco di nuovo funzionano. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
Palmsey,

@Andrew Certo, puoi. Questo è il principio fondamentale per superare questo problema e ho anche aggiunto un aggiornamento contenente un esempio di codice completo;)
Murat Yıldız

Ho anche aggiuntoonfocusout="this.setAttribute('readonly', 'readonly');"
rinatdobr il

16

La migliore soluzione:

Impedisci il nome utente (o e-mail) e la password del completamento automatico:

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

Impedisci il completamento automatico di un campo:

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

Spiegazione: autocompletecontinua a lavorare <input>, autocomplete="off"non funziona, ma è possibile passare offa una stringa casuale, come nope.

Funziona in:

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

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


2
Ho trovato questo per funzionare nei miei test preliminari. Così strano che "off" non funziona.
Craig Jacobs,

Questo non funziona per Chrome su Android. Ho provato a impostare i valori di stringa per l' autocompleteattributo e visualizza ancora le voci precedenti come suggerimenti di completamento automatico sotto l'input.
tebs1200,

@ tebs1200 Quale? Il campo password o il campo di testo?
Cava,

@Cava scusa per la risposta ritardata. Il campo di testo. Non importa quale sia il valore impostato autocomplete, ricevo comunque un suggerimento a discesa basato sui valori immessi in precedenza. Va bene sul desktop, ma non su Android Chrome.
tebs1200,

14

Un po 'tardi al gioco ... ma ho riscontrato questo problema e ho provato diversi fallimenti, ma questo funziona per me trovato su MDN

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 in questo modo:

autocomplete="nope"

13

Aggiungere il

autocomplete="off"

al tag del modulo disabiliterà il completamento automatico del browser (ciò che è stato precedentemente digitato in quel campo) da tutti i inputcampi all'interno di quel particolare modulo.

Testato su:

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

13

L'aggiunta autocomplete="off"non lo taglierà.

Cambia l'attributo del tipo di input in type="search".
Google non applica il riempimento automatico agli input con un tipo di ricerca.


4
È un trucco. Il campo non è un campo di ricerca. In futuro ciò potrebbe causare problemi.
Roel,

12

Usa un nome e un ID non standard per i campi, quindi anziché "nome" hanno "nome_". I browser non lo vedranno quindi come il campo del nome. La parte migliore è che puoi farlo in alcuni ma non in tutti i campi e completerà automaticamente alcuni ma non tutti i campi.


Il problema è che se qualsiasi altro sito utilizza "name_" per raggiungere lo stesso obiettivo, si torna al punto di partenza.
ConroyP

3
quindi rendilo "mysite_name". Se qualcun altro lo utilizza, farei loro delle domande ...
Steve Perks,

questo rovina alcune di quelle utility di popolamento automatico
Simon_Weaver,

12

Al fine di evitare l'XHTML non valido, è possibile impostare questo attributo utilizzando JavaScript. Esempio usando jQuery:

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

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

Il problema è che gli utenti senza javascript otterranno la funzionalità di completamento automatico.


38
questo non evita xhtml non valido, aggiunge semplicemente il bit non valido in modo dinamico dopo averlo verificato e dichiarato dichiarato valido!
Andii

@Andiih: Quindi c'è un modo per far funzionare il completamento automatico in xhtml?
Cherouvim,

1
Lavora (o smetti di funzionare quale è l'obiettivo): sì come sopra. Ma valido - no.
Andiih

11

prova anche questi se autocomplete="off"non funziona:

autocorrect="off" autocapitalize="off" autocomplete="off"

11

Non riesco a credere che questo sia ancora un problema così a lungo dopo che è stato segnalato. Le soluzioni di cui sopra non hanno funzionato per me, poiché Safari sembrava sapere quando l'elemento non era visualizzato o off-screen, tuttavia quanto segue ha funzionato per me:

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

Spero che sia utile per qualcuno!


1
quindi, mettendo questo prima dell'attuale campo nome utente e password ha funzionato? il browser riempiva quelli e non quelli reali
Andrew,

11

Quindi eccolo qui:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">


1
Sembra una buona idea se le caselle di testo di stile impediscono il flash della password visibile.
Andrew,

1
Grazie mille, questo ha fatto il lavoro +1, la mia variazione alla tua soluzione è stata quella di farcela su una sola riga: <input oninput = "this.type = 'password'" id = "inputpassword" type = "text">
Hasnaa Ibraheem,

@HasnaaIbraheem Grazie (: a volte più leggibile è meglio.
Stav Bodik

11

Questo è un problema di sicurezza che i browser ora ignorano. I browser identificano e memorizzano i contenuti utilizzando i nomi di input, anche se gli sviluppatori considerano le informazioni sensibili e non devono essere archiviate. Fare un nome di input diverso tra 2 richieste risolverà il problema (ma verrà comunque salvato nella cache del browser e aumenterà anche la cache del browser). Chiedere all'utente di attivare o disattivare le opzioni nelle impostazioni del proprio browser non è una buona soluzione. Il problema può essere risolto nel backend.

Ecco la mia soluzione. Un approccio che ho implementato nel mio quadro. Tutti gli elementi di completamento automatico vengono generati con un input nascosto come questo:

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

Il server quindi elabora le variabili post in questo modo:

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

È possibile accedere al valore come al solito

var_dump($_POST['username']);

E il browser non sarà in grado di suggerire informazioni dalla richiesta precedente o da utenti precedenti.

Tutto funziona come un incantesimo, anche se gli aggiornamenti dei browser, vogliono ignorare il completamento automatico o meno. Questo è stato il modo migliore per risolvere il problema per me.


10

Nessuno degli hack menzionati qui ha funzionato per me in Chrome. C'è una discussione del problema qui: https://code.google.com/p/chromium/issues/detail?id=468153#c41

Aggiungendo questo all'interno di un'opera <form>(almeno per ora):

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

1
Nota che usando questa tecnica, FireFox eseguirà comunque la compilazione automatica di quel campo nascosto, che verrà incluso al momento dell'invio del modulo. Ciò sarebbe probabilmente negativo, poiché la password verrebbe trasferita su una connessione potenzialmente non protetta. Fortunatamente l'aggiunta maxlength="0"impedisce a Firefox di compilare automaticamente il campo.
Mikal Schacht Jensen,

9

È possibile utilizzare in input.

Per esempio;

<input type=text name="test" autocomplete="off" />
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.