Come disabilitare il riempimento automatico in Safari 7

Sto cercando di trovare un modo per rendere Safari 7 (testato con la versione 7.0.2, 7.0.3) rispetto agli attributi autocomplete = “off”. Non importa cosa cerco, continua a riempire automaticamente.

Questo è un problema per una delle nostre pagine di amministrazione in cui configuriamo nuovi utenti. I nostri utenti continuano a risparmiare con il proprio nome utente / password.

Ecco una versione abbreviata del modulo che stiamo utilizzando. Ho provato a rinominare i campi in “xxu” e “xxp” ma la compilazione automatica sembra leggere la didascalia dell’etichetta. Mi sono ingannato con varie etichette diverse ma in qualche modo si triggers il riempimento automatico.

Ho trovato questo articolo sul sito di Apple che descrive questo problema. https://discussions.apple.com/message/25080203#25080203

Qualcuno conosce qualche altro metodo per disabilitare il riempimento automatico per un modulo in Safari 7? (Agh, questo è il tipo di cosa che ci aspetteremmo da IE)

Grazie per l’aiuto.

Abbiamo avuto lo stesso problema di recente. Inoltre, abbiamo avuto una convalida AJAX del nostro modulo in corso su Bürk. Per qualche strana ragione, ciò indurrebbe il safari a riempire di nuovo il nostro campo di input email. Quindi, ogni volta che inserisci l’email che desideri, Safari dovrebbe inserire un’email che preferiva. Rendere imansible seguire la nostra forma.

La nostra soluzione

stava per interrompere l’algoritmo di riempimento automatico di Safaris (e Chromes).

HTML:

 

CSS:

 .douchebag_safari { position: fixed; width: 1px; left: -50px; } .douchebag_safari input { width: 1%; } 

JS:

 $('#form').on('submit', function () { "use strict"; $('.js-clear_field').attr('disabled', 'disabled'); } 

Il jist di esso è: Inseriamo campi di input di tipo email e password con nomi che si posizionano più in alto (o lo stesso?) Nell’algoritmo di riempimento automatico di Safari e li nascondono all’esterno dello schermo. OnSubmit, i campi saranno disabilitati e saranno quindi esclusi dal POST al nostro back-end.

Lo svantaggio è che gli utenti non avranno il completamento automatico nel nostro modulo, ma abbiamo deciso che ne è valsa la pena nel nostro caso.

NOTA (supponendo che tu stia attento ): Gli utenti con Javascript disabilitato continueranno a includere questi campi nei loro POST. A seconda della configurazione, è necessario consentire a questi due campi di accedere al back-end per evitare errori. Assicurati di non fare nulla con questi campi per motivi di sicurezza!

Come bonus, questo ha risolto un bug in cui Chrome (35) presupponeva che il campo di immissione sopra il campo della password fosse il nome utente. Nel nostro caso, si trattava di un campo numerico, che forniva una strana esperienza utente e bug.

Sono andato con una variazione semplificata dell’approccio douchebag_safari che @Skurpi ha inventato. È solo HTML e va in fondo alla mia forma.

  

Ho trovato un modo semplice e veloce per evitare il completamento automatico del modulo. Funziona in FF 27, Chrome 36 e Safari 7.0.5 su Mac. Non l’ho ancora testato in altri sistemi operativi.

Ho semplicemente messo un campo falso come primo posto nel mio modulo, senza bisogno di etichette o id e attributi del nome. L’ho nascosto ad esempio con uno stile in linea e voilà !

  

I campi email e password nel mio modulo vengono riempiti con i valori del database come previsto e non vengono più completati automaticamente.

Ad essere onesti, non mi piace neanche questa soluzione … Mi piacerebbe trovare una soluzione compatibile e standard ma sembra che il completamento automatico = “off” non funzioni più.

Aveva lo stesso problema e provato le prime due soluzioni HTML / CSS menzionate.

Non hanno funzionato per me (o Safari 9.0.3 :)), quindi ho implementato una soluzione come questa

 

in cima ai campi di inserimento del modulo.

Testato su Safari, Firefox (44.0.2) e Chrome (48.0.2564.109) in esecuzione su OS X El Capitan.

Ho usato un numero casuale e l’ho incorporato in ogni nome di campo in modo che il browser non riconoscesse mai il nome del campo.

Le soluzioni di cui sopra non hanno funzionato per me. Dopo l’indagine, ho potuto valutare che la decisione di Safari di abilitare la compilazione automatica si basa sui seguenti fattori:

  • L’attributo “id” dell’ingresso contiene “nome”?
  • L’attributo “nome” dell’ingresso contiene “nome”?
  • L’etichetta dell’ingresso contiene “nome”?

Potrei quindi disabilitare il riempimento automatico di Safari con il seguente codice, che ho terminato con il wrapping in un plug-in jQuery, per comodità:

 $(document).ready(function () { $('input').disableAutoFill(); }); 

Ho adottato una soluzione più semplice che ci si adatta dove ci sono amministratori che gestiscono account utente e che occasionalmente impostano la loro password, e che è semplicemente per cambiare il tipo di input della password dell’utente come:

Semplice ma efficace.

Puoi provare questo:

Se sei in grado di utilizzare JavaScript e jQuery, puoi posizionarlo al caricamento del codice html (body onload):

 $('#theform input').val(''); 

Questa domanda è simile alla seguente: autocomplete = “off” è compatibile con tutti i browser moderni?

Ci sono dei browser che non supportano più il autocomplete="off"

Puoi usare questo codice javascript:

 if (document.getElementsByTagName) { var inputElements = document.getElementsByTagName(“input”); for (i=0; inputElements[i]; i++) { if (inputElements[i].className && (inputElements[i].className.indexOf(“disableAutoComplete”) != -1)) { inputElements[i].setAttribute(“autocomplete”,”off”); } } } 

Ho provato di tutto, ho funzionato, e poi una versione successiva di Safari ha rotto di nuovo il mio sito web. Sto per provare i campi extra (grazie a Skurpi). Nel frattempo, ecco la mia nuova soluzione (in PHP)

 if(strpos($_SERVER['HTTP_USER_AGENT'],'Safari') !== false) { ?> 
The Safari browser has a known bug: autocomplete replaces required data in our form with incorrect values. Unfortunately this may prevent you from adding products to the shopping cart.

Please try a different browser or go to your browser settings and turn off autocomplete and refresh the page.
< ?php }

Se un numero sufficiente di siti Web esegue questa operazione, forse il team di Safari riceverà un suggerimento e correggerà il browser in modo da rispettare l'attributo autocompletamento = "distriggersto".