Come attivare il riempimento automatico in Google Chrome?


191

Vorrei sapere se esiste una sorta di markup speciale per abilitare la funzione di compilazione automatica di Chrome per un modulo specifico. Ho trovato solo domande su come disabilitarlo, ma vorrei sapere se posso aggiungere qualche tipo di markup al codice html per dire al browser "questo è l'input per l'indirizzo" o "questo è il codice postale campo "per riempirlo correttamente (presupponendo che l'utente abbia attivato questa funzione).

Risposte:


182

AGGIORNAMENTO per il 2017: sembra che la risposta di Katie abbia informazioni più aggiornate della mia. Lettori futuri: dai il tuo voto positivo alla sua risposta .

Questa è una grande domanda e una per la quale la documentazione è sorprendentemente difficile da trovare. In realtà, in molti casi scoprirai che la funzionalità di compilazione automatica di Chrome "funziona". Ad esempio, il seguente frammento di HTML produce un modulo che, almeno per me (Chrome v. 18), viene automaticamente compilato dopo aver fatto clic nel primo campo:

<!DOCTYPE html>
<html>
<body>    
<form method="post">
  First name:<input type="text" name="fname" /><br />
  Last name: <input type="text" name="lname" /><br />
  E-mail: <input type="text" name="email" /><br />
  Phone: <input type="text" name="phone" /><br />
  Address: <input type="text" name="address" /><br />
</form>
</body>
</html>

Tuttavia, questa risposta è insoddisfacente, in quanto lascia la soluzione nel regno della "magia". Scavando più a fondo ho appreso che Chrome (e altri browser abilitati al riempimento automatico) si basano principalmente su indizi contestuali per determinare il tipo di dati che dovrebbero essere compilati negli elementi del modulo. Esempi di tali indizi contestuali includono ilname di un elemento di input, il testo che circonda l'elemento e qualsiasi testo segnaposto.

Di recente, tuttavia, il team di Chrome ha riconosciuto che si tratta di una soluzione insoddisfacente e ha iniziato a sollecitare la standardizzazione in materia. Un post molto istruttivo del gruppo Google Webmasters ha recentemente discusso questo problema, spiegando:

Sfortunatamente, finora è stato difficile per i webmaster garantire che Chrome e altri fornitori di moduli possano analizzare correttamente il loro modulo. Esistono alcuni standard; ma gravano onerosamente sull'implementazione del sito Web, quindi in pratica non vengono utilizzati molto.

(Gli "standard" a cui fanno riferimento sono una versione più recente delle specifiche menzionate nella risposta di Avalanchis sopra).

Il post di Google continua descrivendo la soluzione proposta (che viene soddisfatta da critiche significative nei commenti del post). Propongono l'uso di un nuovo attributo a questo scopo:

Basta aggiungere un attributo all'elemento di input, ad esempio un campo dell'indirizzo e-mail potrebbe apparire come:

<input type=”text” name=”field1” x-autocompletetype=”email” />

... dove x-sta per "sperimentale" e verrà rimosso se e quando questo diventerà uno standard. Leggi il post per maggiori dettagli, o se vuoi approfondire, troverai una spiegazione più completa della proposta sul wiki di whatwg .


AGGIORNAMENTO: Come indicato in queste risposte perspicaci , è possibile trovare tutte le espressioni regolari utilizzate da Chrome per identificare / riconoscere i campi comuni . Quindi, per rispondere alla domanda originale, assicurati solo che i nomi dei tuoi campi html corrispondano a queste espressioni. Alcuni esempi includono:autofill_regex_constants.cc.utf8

  • nome di battesimo: "first.*name|initials|fname|first$"
  • cognome: "last.*name|lname|surname|last$|secondname|family.*name"
  • e-mail: "e.?mail"
  • Indirizzo Linea 1): "address.*line|address1|addr1|street"
  • Cap: "zip|postal|post.*code|pcode|^1z$"

3
Inoltre, devi inviare un <form> completo -Tag con "azione" e "metodo"
qualle

Anche se questo potrebbe essere rilevante per i miei test, solo i metodi che ho delineato di seguito funzionano davvero.
Michea

Immagino che le costanti regex di compilazione automatica non siano l'unica cosa che utilizza, ma ricordano anche le cose dagli input con nome personalizzato.
CloudMeta,

1
Ho usato l'URL in questa risposta ed è stato rotto. Funziona ora: code.google.com/p/chromium/codesearch#chromium/src/components/…
Nathan,

2
L'URL fornito da @Nathan non funziona più - Ecco quello attuale, fino a quando non lo cambiano di nuovo :) cs.chromium.org/chromium/src/components/autofill/core/common/…
HungryBeagle

85

Questa domanda è piuttosto vecchia ma ho una risposta aggiornata !

Ecco un link alla documentazione WHATWG per abilitare il completamento automatico.

Google ha scritto una guida molto carina per lo sviluppo di applicazioni Web che sono amichevoli per i dispositivi mobili. Hanno una sezione su come nominare gli input sui moduli per usare facilmente il riempimento automatico. Anche se è scritto per dispositivi mobili, questo vale sia per desktop che per dispositivi mobili!

Come abilitare il completamento automatico nei moduli HTML

Ecco alcuni punti chiave su come abilitare il completamento automatico:

  • Usa a <label>per tutti i tuoi <input>campi
  • Aggiungi un autocompleteattributo ai <input>tag e compila utilizzando questa guida .
  • Nomina correttamente i tuoi attributi namee autocompleteper tutti i <input>tag
  • Esempio :

    <label for="frmNameA">Name</label>
    <input type="text" name="name" id="frmNameA"
    placeholder="Full name" required autocomplete="name">
    
    <label for="frmEmailA">Email</label>
    <input type="email" name="email" id="frmEmailA"
    placeholder="name@example.com" required autocomplete="email">
    
    <!-- note that "emailC" will not be autocompleted -->
    <label for="frmEmailC">Confirm Email</label>
    <input type="email" name="emailC" id="frmEmailC"
    placeholder="name@example.com" required autocomplete="email">
    
    <label for="frmPhoneNumA">Phone</label>
    <input type="tel" name="phone" id="frmPhoneNumA"
    placeholder="+1-555-555-1212" required autocomplete="tel">

Come assegnare un nome ai <input>tag

Per attivare il completamento automatico, assicurati di nominare correttamente gli attributi namee autocompletenei <input>tag. Ciò consentirà il completamento automatico dei moduli. Assicurati anche di avere un <label>! Questa informazione può anche essere trovata qui .

Ecco come nominare i tuoi input:

  • Nome
    • Utilizzare uno di questi per name:name fname mname lname
    • Utilizzare uno di questi per autocomplete:
      • name (per nome completo)
      • given-name (per nome)
      • additional-name (per secondo nome)
      • family-name (per cognome)
    • Esempio: <input type="text" name="fname" autocomplete="given-name">
  • E-mail
    • Utilizzare uno di questi per name:email
    • Utilizzare uno di questi per autocomplete:email
    • Esempio: <input type="text" name="email" autocomplete="email">
  • Indirizzo
    • Utilizzare uno di questi per name:address city region province state zip zip2 postal country
    • Utilizzare uno di questi per autocomplete:
      • Per un indirizzo inserito:
        • street-address
      • Per due ingressi indirizzo:
        • address-line1
        • address-line2
      • address-level1 (Stato o Provincia)
      • address-level2 (città)
      • postal-code (Cap)
      • country
  • Telefono
    • Utilizzare uno di questi per name:phone mobile country-code area-code exchange suffix ext
    • Utilizzare uno di questi per autocomplete:tel
  • Carta di credito
    • Utilizzare uno di questi per name:ccname cardnumber cvc ccmonth ccyear exp-date card-type
    • Utilizzare uno di questi per autocomplete:
      • cc-name
      • cc-number
      • cc-csc
      • cc-exp-month
      • cc-exp-year
      • cc-exp
      • cc-type
  • Nomi utente
    • Utilizzare uno di questi per name:username
    • Utilizzare uno di questi per autocomplete:username
  • Le password
    • Utilizzare uno di questi per name:password
    • Utilizzare uno di questi per autocomplete:
      • current-password (per i moduli di accesso)
      • new-password (per i moduli di iscrizione e modifica password)

risorse


39

Dal mio test, il x-autocompletetag non fa nulla. Utilizza invece i autocompletetag sui tag di input e imposta i loro valori in base alle specifiche HTML qui http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms. html # campo di compilazione automatica .

Esempio:

<input name="fname" autocomplete="given-name" type="text" placeholder="First Name" required>

Il tag del modulo padre deve essere completato automaticamente = "on" e method = "POST".


2
in quali browser è implementata questa specifica? qualche esperienza / test ancora fatto?
Staabm,

Il W3C spec stati che autocomplete dovrebbero contenere solo on , offo default. Quindi questo è markup non valido e sarà soggetto a incongruenze. In realtà penso che il posizionamento nell'attributo di completamento automatico sia irrilevante. Immagino che guardi tutti gli attributi e il completamento automatico sembra essere uno di quelli che controlla.
Liam,

1
Questo è HTML corretto, vedi le specifiche WHATWG e il post di Google .
AlecRust,


4

Ho appena giocato in giro con le specifiche e ho ottenuto un buon esempio funzionante, inclusi alcuni campi in più.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>

  <form autocomplete="on" method="POST">

    <fieldset>
        <legend>Ship the blue gift to...</legend>
        <p>
            <label> Firstname:
<input name="fname" autocomplete="section-blue shipping given-name" type="text"  required>
            </label>
      </p>
        <p>
            <label> Lastname:
<input name="fname" autocomplete="section-blue shipping family-name" type="text" required>
            </label>
      </p>

        <p>
            <label> Address: <input name=ba
                autocomplete="section-blue shipping street-address">
            </label>


      </p>
        <p>
            <label> City: <input name=bc
                autocomplete="section-blue shipping address-level2">
            </label>

      </p>
        <p>
            <label> Postal Code: <input name=bp
                autocomplete="section-blue shipping postal-code">
            </label>
      </p>

    </fieldset>
    <fieldset>
        <legend>Ship the red gift to...</legend>
        <p>
            <label> Firstname:
<input name="fname" autocomplete="section-red shipping given-name" type="text" required>
            </label>
      </p>

        <p>
            <label> Lastname:
<input name="fname" autocomplete="section-red shipping family-name" type="text" required>
            </label>
      </p>
        <p>
            <label> Address: <input name=ra
                autocomplete="section-red shipping street-address">
            </label>
      </p>


        <p>
            <label> City: <input name=bc
                autocomplete="section-red shipping address-level2">
            </label>

      </p>

        <p>
            <label> Postal Code: <input name=rp
                autocomplete="section-red shipping postal-code">
            </label>
      </p>

    </fieldset>

        <fieldset>
        <legend>payment address</legend>
        <p>
            <label> Firstname:
<input name="fname" autocomplete="billing given-name" type="text" required>
            </label>
      </p>

        <p>
            <label> Lastname:
<input name="fname" autocomplete="billing family-name" type="text" required>
            </label>
      </p>
        <p>
            <label> Address: <input name=ra
                autocomplete="billing street-address">
            </label>
      </p>


        <p>
            <label> City: <input name=bc
                autocomplete="billing address-level2">
            </label>

      </p>

        <p>
            <label> Postal Code: <input name=rp
                autocomplete="billing postal-code">
            </label>
      </p>

    </fieldset>
    <input type="submit" />
</form>

</body>
</html>

JSBIN

Contiene 2 aree di indirizzi separate e anche diversi tipi di indirizzo. Testato anche su iOS 8.1.0 e sembra che riempia sempre tutti i campi contemporaneamente, mentre il desktop automatico si riempie automaticamente di indirizzo per indirizzo.


1
Non sono sicuro del motivo per cui questa risposta ottiene voti negativi. L'esempio sopra funziona ancora per me usando i browser descritti
staabm

1
Il completamento automatico mostrato negli esempi precedenti è da qui: html.spec.whatwg.org/multipage/forms.html#autofill
Bryan Rehbein

2

Sembra che avremo un maggiore controllo su questa funzione di compilazione automatica, c'è una nuova API sperimentale in arrivo su Chrome Canary, che può essere utilizzata per accedere ai dati dopo averlo chiesto all'utente:

http://www.chromium.org/developers/using-requestautocomplete http://blog.alexmaccaw.com/requestautocomplete

nuove informazioni da google:

http://googlewebmastercentral.blogspot.de/2015/03/helping-users-fill-out-online-forms.html

https://developers.google.com/web/fundamentals/input/form/label-and-name-inputs#use-metadata-to-enable-auto-complete


0

Ecco la vera risposta:

L'unica differenza è nell'etichetta stessa. "Nom" deriva da "Nome" o "Nome" in portoghese.

Quindi ecco di cosa hai bisogno:

  • Un wrapper per moduli;
  • UN <label for="id_of_field">Name</label>
  • Un <input id="id_of_field"></input>

Niente di più.


ho anche capito che l'etichetta può anche innescare il completamento automatico dei cromi.
emfi,

Quindi il punto è che il nome dell'etichetta viene utilizzato anche quando si elaborano i campi di completamento automatico? Questa risposta non è molto chiara
Liam,

In realtà Nom proviene dal francese. Ma l'ho fatto funzionare senza un'etichetta, anche un segnaposto per l'input con il valore corretto funziona.
AxelH,


0

Le risposte con solo collegamenti diventano inutili se questi collegamenti si interrompono, come il primo in quella risposta.
bfontaine,

Vero, ma è per questo che la risposta è un wiki della comunità: incoraggiare gli altri a contribuire ad esso. Anche il downvoting di un wiki della community non ha alcun impatto sull'autore, serve solo a seppellire la documentazione di Google. Sentiti sempre libero di aggiornare una risposta wiki della comunità, specialmente se è qualcosa di così secco come aggiornare un link!
Henry,

-3

Nel mio caso, $('#EmailAddress').attr('autocomplete', 'off');non ha funzionato. Ma in seguito funziona su Chrome versione 67 di jQuery.

$('#EmailAddress').attr('autocomplete', 'new-email');
$('#Password').attr('autocomplete', 'new-password');
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.