Disabilita il completamento automatico tramite CSS


94

È possibile utilizzare CSS per disabilitare il completamento automatico su un elemento del modulo (in particolare un campo di testo)?

Uso una libreria di tag che non consente l'elemento di completamento automatico e vorrei disabilitare il completamento automatico senza utilizzare Javascript.

Risposte:


52

Puoi utilizzare un generato ide nameogni volta, che è diverso, quindi il browser non può ricordare questo campo di testo e non suggerirà alcuni valori.

Questa è almeno l'alternativa sicura per tutti i browser, ma consiglierei di andare con la risposta di RobertsonM ( autocomplete="off").


4
Un effetto collaterale di ciò è che la cronologia del browser viene ingombra di molti campi modulo (casuali) diversi. Ogni ricerca di valori noti nella banca dati locale del browser richiederà del tempo.
dermatthias

4
Bella idea, ma non impedisce il salvataggio dei numeri di carta di credito nel database di completamento automatico non crittografato.
Hans-Peter Störr

Se non usi nomi / ID di controllo statico, qualsiasi script verrà interrotto e anche qualsiasi raccolta di dati del modulo verrà interrotta (a meno che ogni aspetto della tua applicazione non sia a conoscenza della nuova convenzione di denominazione e non stia aggiornando dinamicamente anche qualsiasi raccolta di script / dati ).
Gary Richter

Devi evitare il completamento automatico, "randomizzare" i nomi dei campi è l'unico vero modo di procedere. L'uso di qualsiasi suggerimento come autocomplete="off"verrà ignorato nella versione Browser X (corrente + 1). (Ad esempio, l'ultimo Google Chrome ignora il completamento automatico = disattivato.)
Mikko Rantalainen

@kmoser: anche se sconfiggi la funzione di completamento automatico del browser randomizzando l'elemento id, lo salverà comunque nella cache (cioè sul disco rigido di un utente). Che è una cosa orribile da fare al numero di carta di credito di qualcuno o qualsiasi altra informazione sensibile. Inoltre, ingombra inutilmente le unità disco dell'utente. Ogni volta che visitano la tua pagina, un nuovo file (simile a un cookie) verrà salvato sul loro computer. Tanto per il gusto di farlo, prova a svuotare la cache di Chrome e vedere quanto spazio libererà (se non lo fai da un po '). Ecco perché la chiamo un'idea orribile.
c00000fd

129

Allo stato attuale, non esiste alcun attributo "completamento automatico disattivato" in CSS. Tuttavia, html ha un codice semplice per questo:

<input type="text" id="foo" value="bar" autocomplete="off" />

Se stai cercando un effector a livello di sito, uno facile sarebbe semplicemente avere una funzione js per eseguire tutti gli "input" e aggiungere questo tag, o cercare la classe / id css corrispondente.

L'attributo di completamento automatico funziona bene in Chrome e Firefox (!), Ma vedi anche Esiste un modo valido W3C per disabilitare il completamento automatico in un modulo HTML?


4
developer.mozilla.org/en-US/docs/Web/Security/… suggerisce autocomplete="anyrandominvalidvalue"che funzionerà.
Andrew Stalker

49

puoi facilmente implementare da jQuery

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

4
Nella maggior parte dei casi, $ ('form'). Attr ('autocomplete', 'off'); è molto più efficiente (vedere il commento a una risposta di seguito)
irakli

@irakli Nel mio caso, l'utilizzo formè l'UNICA cosa che ha funzionato. Non input. Grazie.
khaverim

1
Ciao, 2018 e questo è quasi l'unico modo in cui posso farlo funzionare in questi giorni. Inoltre, @irakli questo è vero se è necessario utilizzare su un intero modulo il modulo come selettore.
Devon Kiss

15

Se stai usando a formpuoi disabilitare tutti i completamenti automatici con,

<form id="Form1" runat="server" autocomplete="off">

anzi, secondo Mozilla: "Se l'attributo di completamento automatico non è specificato su un elemento di input, il browser utilizza il valore dell'attributo di completamento automatico del proprietario del modulo dell'elemento <input>. Il proprietario del modulo è l'elemento del modulo che questo elemento <input> è un discendente di o l'elemento del modulo il cui id è specificato dall'attributo del modulo dell'elemento di input. Per ulteriori informazioni, vedere l'attributo di completamento automatico in <form>. " considerando che un'alternativa jQuery molto più efficiente a quella mostrata sopra sarebbe: $ ('form'). attr ('autocomplete', 'off');
irakli

13

CSS non ha questa capacità. Dovresti usare lo scripting lato client.


1
Qualche idea su come disabilitare questo in Edge? Non importa cosa facciamo, lo vediamo.
Benjamin Gruenbaum

@BenjaminGruenbaum Using autocomplete="false"funzionerà in Edge. Tecnicamente qualsiasi valore non valido può sostituire "false" qui.
Andrew

4

Ho provato tutti i modi suggeriti da questa domanda, risposte e altri articoli nel web, ma non funziona comunque. Ho provato autocomplete = "new-random-value", autocomplete = "off" nell'elemento form, utilizzando lo script lato client come sotto ma al di fuori di $ (document) .ready () come uno degli utenti menzionati:

$(':input').on('focus', function () {
  $(this).attr('autocomplete', 'off')
});

Ho trovato forse un'altra priorità nel browser a causa di questo strano comportamento! Quindi ho cercato di più e, infine, ho letto di nuovo attentamente sotto le righe di questo buon articolo :

Per questo motivo, molti browser moderni non supportano autocomplete = "off" per i campi di accesso:

Se un sito imposta il completamento automatico = "off" per a 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 la pagina. Se un sito imposta il completamento automatico = "off" per i campi del nome utente e della 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 la pagina. Questo è il comportamento in Firefox (dalla versione 38), Google Chrome (dalla versione 34) e Internet Explorer (dalla versione 11).

Se stai definendo una pagina di gestione utenti in cui un utente può specificare una nuova password per un'altra persona, e quindi vuoi impedire il riempimento automatico dei campi password, puoi usare autocomplete = "new-password" ; tuttavia, il supporto per questo valore non è stato implementato su Firefox.

Ha appena funzionato. Ho provato specialmente in Chrome e spero che continui a funzionare e aiuti gli altri.


1

Ho risolto il problema aggiungendo un falso nome di completamento automatico per tutti gli input.

$("input").attr("autocomplete", "fake-name-disable-autofill");

0

Grazie alla soluzione di @ ahhmarr sono stato in grado di risolvere lo stesso problema nel mio ambiente Angular + ui-router , che condividerò qui per chiunque sia interessato.

Nel mio index.htmlho aggiunto il seguente script:

<script type="text/javascript">
    setTimeout(function() {
        $('input').attr('autocomplete', 'off');
    }, 2000);
</script>

Quindi, per coprire i cambiamenti di stato, ho aggiunto quanto segue nel mio controller di root:

$rootScope.$on('$stateChangeStart', function() {
                $timeout(function () {
                    $('input').attr('autocomplete', 'off');
                }, 2000);
            });

I timeout sono per il rendering di html prima di applicare jquery.

Se trovi una soluzione migliore, fammelo sapere.


0

Non puoi usare CSS per disabilitare il completamento automatico, ma puoi usare HTML:

<input type="text" autocomplete="false" />

Tecnicamente puoi sostituire falsecon qualsiasi valore non valido e funzionerà. Questo iOS è l'unica soluzione che ho trovato che funziona anche in Edge.


0

Ci sono 3 modi per farlo, li menziono per essere il modo migliore ...

Modo 1-HTML:

<input type="text" autocomplete="false" />

Modalità 2-Javascript:

document.getElementById("input-id").getAttribute("autocomplete") = "off";

Modo 3-jQuery:

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

0

Uso solo 'new-password'invece 'off'il completamento automatico.

e ho anche provato a usare questo codice e funziona (almeno da parte mia), uso WP e GravityForm per le tue informazioni

$('input').attr('autocomplete','new-password');

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

3
Questo non fornisce una risposta alla domanda posta. OP ha chiesto specificamente una soluzione CSS, inoltre, è esattamente la stessa risposta di una già esistente.
Holger Solo il
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.