2012-05-24 5 views

risposta

25

Se ho ben compreso il codice sorgente di Firefox, il browser cerca prima i campi password nei moduli. Se il modulo contiene più di 3 campi password, la funzione di riempimento automatico ignora tale modulo.

Dopo aver trovato da 1 a 3 campi di password, il browser cerca il campo di accesso. Il browser esegue una ricerca all'indietro partendo dal primo campo della password e presuppone che il campo di accesso sia il primo campo trovato del tipo text o email o url o tel o number.

Il passo successivo dipende dal controllo dei moduli durante il caricamento della pagina o dall'invio del modulo. Se controlliamo durante il caricamento della pagina e c'è un campo di accesso e esattamente un campo di password, il caso è semplice e il browser può compilare il modulo.

Altri casi (modulo di invio o più di 1 campo password) eseguono una logica "intelligente" per determinare quale campo della password contiene la nuova password e quale la vecchia password, probabilmente per aggiornare le password memorizzate). Se sei interessato ai dettagli, scarica il codice sorgente e apri il file toolkit/components/passwordmgr/nsLoginManager.js. Le funzioni da verificare sono _fillForm, _getFormFields e _getPasswordFields.

Solo per riassumere, Firefox non ha bisogno di alcun ID, nome o attributi di classe per indovinare quale campo è login o password. Si basa solo sui tipi e sull'ordine dei campi modulo.

+2

Questo è corretto. Va anche detto che questo funziona solo con i campi nell'HTML originale, non con le cose generate da JS. – user123444555621

+0

Grazie mille. È strano dal momento che Firefox memorizza Fieldname in signon.sqlite. Non ho avuto il tempo e la pazienza di cercare nel codice sorgente, ma darò un'occhiata. –

+1

La tua risposta è molto utile grazie per aver guardato il codice FF e averlo spiegato. Ho provato quello che hai spiegato e verifica ciò che hai delineato. Questo comportamento mi confondeva perché speravo di rimuovere il completamento automatico dei campi cambiando i loro nomi, perché autocomplete = off non impediva il completamento automatico dei dati che erano stati archiviati prima che un autocomplete = off fosse abilitato. – eloone

2

Questi sono gli unici due elementi nel modulo? È probabile che Firefox stia memorizzando la struttura del modulo (due caselle di input, una contrassegnata come normale, una contrassegnata come password) e compilando le informazioni salvate senza rispettare l'ID degli elementi di input.

Prova questo: aggiungi un elemento di input in più al modulo e guarda cosa succede. O Firefox non compilerà nulla, o troverai il tuo nome nel primo campo e il campo della password compilato, mentre il secondo elemento di input è vuoto.

4

Ho provato una soluzione semplice che funziona fino ad ora. Crea 2 campi nascosti e il browser li riempirà automaticamente.

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

Sembra utilizzando un testo di input disabile tra gli ingressi di login e password fa il trucco ben:

<input type="text" disabled="disabled" style="display:none"> 
Problemi correlati