Yah, agak terlambat ke pesta, tetapi tampaknya ada sedikit kesalahpahaman tentang bagaimana autocomplete
seharusnya dan tidak seharusnya bekerja. Menurut spesifikasi HTML, agen pengguna (dalam hal ini Chrome) dapat mengganti autocomplete
:
https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
Agen pengguna dapat mengizinkan pengguna untuk menimpa nama bidang isi ulang elemen elemen, misalnya untuk mengubahnya dari "off" ke "on" untuk memungkinkan nilai diingat dan diawali meskipun ada keberatan dari penulis halaman, atau untuk selalu "off", tidak pernah mengingat nilai-nilai. Namun, agen pengguna tidak boleh mengizinkan pengguna untuk secara sepele menimpa nama isian isian dari "off" menjadi "on" atau nilai-nilai lainnya, karena ada implikasi keamanan yang signifikan bagi pengguna jika semua nilai selalu diingat, terlepas dari preferensi situs.
Jadi dalam kasus Chrome, para pengembang pada dasarnya mengatakan "kami akan menyerahkan ini kepada pengguna untuk memutuskan dalam preferensi mereka apakah mereka mau autocomplete
bekerja atau tidak. Jika Anda tidak menginginkannya, jangan aktifkan di browser Anda" .
Namun, tampaknya ini sedikit terlalu bersemangat pada bagian mereka untuk seleraku, tetapi memang begitulah adanya. Spesifikasi tersebut juga membahas implikasi keamanan potensial dari langkah tersebut:
Kata kunci "tidak aktif" menunjukkan bahwa data input kontrol sangat sensitif (misalnya kode aktivasi untuk senjata nuklir); atau bahwa itu adalah nilai yang tidak akan pernah digunakan kembali (misalnya kunci satu kali untuk login bank) dan oleh karena itu pengguna harus secara eksplisit memasukkan data setiap kali, alih-alih dapat mengandalkan UA untuk memilih nilai untuknya; atau bahwa dokumen tersebut menyediakan mekanisme pelengkapan otomatis sendiri dan tidak ingin agen pengguna memberikan nilai pelengkapan otomatis.
Jadi setelah mengalami frustrasi yang sama seperti orang lain, saya menemukan solusi yang cocok untuk saya. Ini serupa dalam nada denganautocomplete="false"
jawaban.
Artikel Mozilla berbicara persis tentang masalah ini:
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
Dalam beberapa kasus, browser akan terus menyarankan nilai pelengkapan otomatis meskipun atribut pelengkapan otomatis disetel ke mati. Perilaku tak terduga ini bisa sangat membingungkan bagi pengembang. Trik untuk benar-benar memaksa penyelesaian tidak adalah dengan menetapkan string acak ke atribut
Jadi kode berikut harus berfungsi:
autocomplete="nope"
Dan seharusnya masing-masing dari berikut ini:
autocomplete="false"
autocomplete="foo"
autocomplete="bar"
Masalah yang saya lihat adalah bahwa agen peramban mungkin cukup pintar untuk mempelajari autocomplete
atribut dan menerapkannya saat berikutnya ia melihat formulir. Jika memang melakukan ini, satu - satunya cara saya bisa melihat untuk tetap menyelesaikan masalah adalah dengan mengubah secara dinamisautocomplete
atribut ketika halaman dihasilkan.
Satu hal yang layak disebutkan adalah bahwa banyak browser akan mengabaikan autocomplete
pengaturan untuk bidang login (nama pengguna dan kata sandi). Seperti yang dinyatakan dalam artikel Mozilla:
Untuk alasan ini, banyak browser modern tidak mendukung autocomplete = "off" untuk bidang login.
- Jika suatu situs menyetel pelengkapan otomatis = "off" untuk suatu formulir, dan formulir tersebut menyertakan bidang input nama pengguna dan kata sandi, maka browser akan tetap menawarkan untuk mengingat login ini, dan jika pengguna setuju, browser akan mengisi ulang bidang tersebut secara otomatis saat berikutnya pengguna mengunjungi halaman ini.
- Jika sebuah situs menetapkan autocomplete = "off" untuk bidang input nama pengguna dan kata sandi, maka browser akan tetap menawarkan untuk mengingat login ini, dan jika pengguna setuju, browser akan mengisi secara otomatis bidang tersebut saat berikutnya pengguna mengunjungi halaman ini.
Ini adalah perilaku di Firefox (sejak versi 38), Google Chrome (sejak 34), dan Internet Explorer (sejak versi 11).
Akhirnya sedikit info tentang apakah atribut tersebut berada pada form
elemen atau input
elemen. Spek lagi memiliki jawaban:
Jika atribut autocomplete dihilangkan, nilai default yang sesuai dengan keadaan atribut autocomplete pemilik form digunakan sebagai gantinya (baik "on" atau "off"). Jika tidak ada pemilik formulir, maka nilai "on" digunakan.
Begitu. Meletakkannya di formulir harus berlaku untuk semua bidang input. Meletakkannya di elemen individu harus berlaku untuk elemen itu saja (bahkan jika tidak ada satu di formulir). Jika autocomplete
tidak disetel sama sekali, defaultnya adalah on
.
Ringkasan
Untuk menonaktifkan autocomplete
seluruh formulir:
<form autocomplete="off" ...>
Atau jika Anda perlu melakukannya secara dinamis:
<form autocomplete="random-string" ...>
Untuk menonaktifkan autocomplete
elemen individual (terlepas dari pengaturan formulir yang ada atau tidak)
<input autocomplete="off" ...>
Atau jika Anda perlu melakukannya secara dinamis:
<input autocomplete="random-string" ...>
Dan ingat bahwa agen pengguna tertentu dapat mengesampingkan bahkan upaya paling sulit Anda untuk menonaktifkan autocomplete
.