Saya telah membuat aplikasi web yang menggunakan drop-down tagbox. Ini berfungsi baik di semua browser kecuali browser Chrome (Versi 21.0.1180.89).
Terlepas dari kedua input
bidang DAN form
bidang yang memiliki autocomplete="off"
atribut, Chrome bersikeras menampilkan riwayat tarik turun entri sebelumnya untuk bidang tersebut, yang menghapus daftar tagbox.
html
google-chrome
autocomplete
forms
Tuan Fett
sumber
sumber
Jawaban:
MEMPERBARUI
Tampaknya sekarang Chrome mengabaikan atribut
style="display: none;"
ataustyle="visibility: hidden;
.Anda dapat mengubahnya menjadi sesuatu seperti:
Dalam pengalaman saya, Chrome hanya menyelesaikan yang pertama
<input type="password">
dan yang sebelumnya secara otomatis<input>
. Jadi saya telah menambahkan:Ke bagian atas
<form>
dan kasus itu diselesaikan.sumber
display: none;
akan menghilangkan elemen, tidak ada tentang autocomplete.Cegah pelengkapan otomatis nama pengguna (atau email) dan kata sandi:
Mencegah pelengkapan otomatis bidang ( mungkin tidak berfungsi ):
Penjelasan:
autocomplete
masih berfungsi pada saat<input>
memilikiautocomplete="off"
, tetapi Anda dapat mengubahoff
ke string acak, sepertinope
.Lainnya "solusi" untuk menonaktifkan pelengkapan otomatis bidang (ini bukan cara yang tepat untuk melakukannya, tetapi berfungsi):
1.
HTML:
JS (membebani):
atau menggunakan jQuery:
2.
HTML:
JS (membebani):
atau menggunakan jQuery:
Untuk menambahkan lebih dari satu bidang menggunakan jQuery:
Bekerja di:
Chrome: 49+
Firefox: 44+
sumber
new-password
adalah tangkapan yang bagus untuk setiap input tersembunyi yang sebenarnya bukan kata sandi, terima kasihautocomplete="nope"
sebenarnya berfungsi untuk saya, kecuali saya menambahkannya ke kedua bidang formulir saya. Seperti saya bisa memilikinya di kedua lapangan dan kemudian yang lapangan tidak akan otomatis melengkapi, tetapi bidang lainnya masih akan otomatis melengkapi, tapi begitu aku meletakkannya di kedua bidang, keduanya mulai autocompleting lagi.Tampaknya Chrome sekarang mengabaikan
autocomplete="off"
kecuali itu ada di<form autocomplete="off">
tag.sumber
Pendekatan Modern
Cukup masukan Anda
readonly
, dan pada fokus, hapus saja. Ini adalah pendekatan yang sangat sederhana dan browser tidak akan mengisireadonly
input. Oleh karena itu, metode ini diterima dan tidak akan pernah ditimpa oleh pembaruan peramban di masa mendatang.Bagian selanjutnya adalah opsional. Gaya input Anda sesuai sehingga tidak terlihat seperti
readonly
input.CONTOH KERJA
sumber
modern approach
. Kurang dari 1% pengguna di dunia mematikan Javascript. Jadi sejujurnya, tidak ada gunanya bagi siapa pun untuk mengakomodasi audiens sekecil ini ketika sebagian besar situs web mengandalkan Javascript. Telah mengembangkan situs web untuk waktu yang sangat lama sekarang, dan 100% situs saya menggunakan Javascript dan sangat bergantung padanya. Jika pengguna menonaktifkan Javascript, itu masalah dan pilihan mereka sendiri, bukan milik saya. Mereka tidak akan dapat mengunjungi atau menggunakan setidaknya 90% situs web secara online dengan itu dimatikan ... Downvote Anda sama sekali tidak relevan.Untuk solusi yang andal, Anda dapat menambahkan kode ini ke halaman tata letak Anda:
Chrome menghormati autocomplete = off hanya ketika ada setidaknya satu elemen input lain dalam formulir dengan nilai autocomplete lainnya.
Ini tidak akan berfungsi dengan bidang kata sandi - yang ditangani dengan sangat berbeda di Chrome. Lihat https://code.google.com/p/chromium/issues/detail?id=468153 untuk detail lebih lanjut.
PEMBARUAN: Bug ditutup sebagai "Tidak Akan Diperbaiki" oleh Tim Chromium 11 Maret 2016. Lihat komentar terakhir dalam laporan bug yang awalnya diajukan , untuk penjelasan lengkap. TL; DR: gunakan atribut pelengkapan otomatis semantik seperti autocomplete = "new-street-address" untuk menghindari Chrome melakukan pengisian otomatis.
sumber
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 menggantiautocomplete
:https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
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:
Jadi setelah mengalami frustrasi yang sama seperti orang lain, saya menemukan solusi yang cocok untuk saya. Ini serupa dalam nada dengan
autocomplete="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
Jadi kode berikut harus berfungsi:
Dan seharusnya masing-masing dari berikut ini:
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:Akhirnya sedikit info tentang apakah atribut tersebut berada pada
form
elemen atauinput
elemen. Spek lagi memiliki jawaban: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 adalahon
.Ringkasan
Untuk menonaktifkan
autocomplete
seluruh formulir:Atau jika Anda perlu melakukannya secara dinamis:
Untuk menonaktifkan
autocomplete
elemen individual (terlepas dari pengaturan formulir yang ada atau tidak)Atau jika Anda perlu melakukannya secara dinamis:
Dan ingat bahwa agen pengguna tertentu dapat mengesampingkan bahkan upaya paling sulit Anda untuk menonaktifkan
autocomplete
.sumber
Solusi saat ini adalah menggunakan
type="search"
. Google tidak menerapkan pengisianOtomatis ke input dengan jenis pencarian.Lihat: https://twitter.com/Paul_Kinlan/status/596613148985171968
Pembaruan 04/04/2016: Sepertinya ini sudah diperbaiki! Lihat http://codereview.chromium.org/1473733008
sumber
Chrome versi 34 sekarang mengabaikan
autocomplete=off
, lihat ini .Banyak diskusi tentang apakah ini hal yang baik atau buruk? Apa pandanganmu?
sumber
Browser tidak peduli tentang pelengkapan otomatis = mati otomatis atau bahkan mengisi kredensial ke bidang teks yang salah?
Saya memperbaikinya dengan menyetel bidang kata sandi menjadi hanya-baca dan mengaktifkannya, ketika pengguna mengkliknya atau menggunakan tombol-tab untuk bidang ini.
perbaiki IsiOtomatis browser di: hanya baca dan atur writeble pada fokus (saat klik mouse dan tab bidang)
Pembaruan: Mobile Safari menetapkan kursor di lapangan, tetapi tidak menampilkan keyboard virtual. Perbaikan baru berfungsi seperti sebelumnya tetapi menangani keyboard virtual:
Demo Langsung https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
Omong-omong, informasi lebih lanjut tentang pengamatan saya:
Terkadang saya melihat perilaku aneh ini di Chrome dan Safari, ketika ada bidang kata sandi dalam bentuk yang sama. Saya kira, browser mencari bidang kata sandi untuk memasukkan kredensial Anda yang disimpan. Kemudian ia mengisi nama pengguna ke dalam bidang input-teks terdekat, yang muncul sebelum bidang kata sandi di DOM (hanya menebak karena pengamatan). Karena browser adalah instance terakhir dan Anda tidak dapat mengontrolnya, terkadang bahkan autocomplete = off tidak akan mencegah untuk mengisi kredensial ke bidang yang salah, tetapi bukan bidang pengguna atau nama panggilan.
sumber
Kamu bisa menggunakan
autocomplete="new-password"
Bekerja di:
sumber
TL; DR: Beri tahu Chrome bahwa ini adalah input kata sandi baru dan tidak akan memberikan yang lama sebagai saran pelengkapan otomatis:
autocomplete="off"
tidak berfungsi karena keputusan desain - banyak penelitian menunjukkan bahwa pengguna memiliki lebih lama dan lebih sulit untuk meretas kata sandi jika mereka dapat menyimpannya di browser atau pengelola kata sandi.Spesifikasi untuk
autocomplete
telah berubah , dan sekarang mendukung berbagai nilai untuk mempermudah pengisian formulir masuk:Jika Anda tidak memberikan ini, Chrome masih mencoba menebak, dan ketika itu diabaikan
autocomplete="off"
.Solusinya adalah bahwa
autocomplete
nilai - nilai juga ada untuk formulir reset kata sandi:Anda dapat menggunakan
autocomplete="new-password"
bendera ini untuk memberi tahu Chrome agar tidak menebak kata sandi, meskipun itu telah disimpan untuk situs ini.Chrome juga dapat mengelola kata sandi untuk situs secara langsung menggunakan API kredensial , yang merupakan standar dan mungkin akan memiliki dukungan universal pada akhirnya.
sumber
Saya telah memecahkan pertarungan tanpa akhir dengan Google Chrome dengan menggunakan karakter acak. Saat Anda selalu membuat pelengkapan otomatis dengan string acak, itu tidak akan pernah mengingat apa pun.
Semoga itu akan membantu orang lain.
sumber
Autocomplete="Off"
tidak bekerja lagi.Coba gunakan hanya string acak, bukan
"Off"
, misalnyaAutocomplete="NoAutocomplete"
Saya harap ini membantu.
sumber
Terlihat chrome mengabaikannya
autocomplete="off"
, saya menyelesaikannya dengan cara bodoh yang menggunakan "input palsu" untuk menipu chrome untuk mengisinya alih-alih mengisi yang "asli".Contoh:
Chrome akan mengisi "input palsu", dan ketika mengirimkan, server akan mengambil nilai "input nyata".
sumber
Saya memposting jawaban ini untuk membawa solusi yang diperbarui untuk masalah ini. Saat ini saya menggunakan Chrome 49 dan tidak ada jawaban yang berhasil untuk yang satu ini. Saya juga mencari solusi yang bekerja dengan browser lain dan versi sebelumnya.
Letakkan kode ini di awal formulir Anda
Kemudian, untuk bidang kata sandi asli Anda, gunakan
Komentari jawaban ini jika ini tidak lagi berfungsi atau jika Anda mendapatkan masalah dengan browser atau versi lain.
Disetujui pada:
sumber
kepada siapa pun yang mencari solusi untuk ini, saya akhirnya mengetahuinya.
Chrome hanya mematuhi autocomplete = "off" jika halaman tersebut adalah halaman HTML5 (saya menggunakan XHTML).
Saya mengonversi halaman saya ke HTML5 dan masalahnya hilang (facepalm).
sumber
Ubah atribut tipe input menjadi
type="search"
.Google tidak menerapkan pengisian otomatis pada input dengan jenis pencarian.
sumber
Hingga minggu lalu, dua solusi di bawah ini tampaknya berfungsi untuk Chrome, IE dan Firefox. Tetapi dengan rilis Chrome versi 48 (dan masih di 49), mereka tidak lagi berfungsi:
Berikut ini di elemen input kata sandi:
autocomplete = "off"
Jadi untuk memperbaikinya dengan cepat, pada awalnya saya mencoba menggunakan hack besar yang awalnya mengatur elemen input kata sandi untuk dinonaktifkan dan kemudian menggunakan setTimeout dalam fungsi siap dokumen untuk mengaktifkannya kembali.
Tetapi ini tampak sangat gila dan saya melakukan pencarian lagi dan menemukan jawaban @tibalts di Menonaktifkan IsiOtomatis Chrome . Jawabannya adalah dengan menggunakan autocomplete = "new-password" pada input kata sandi dan ini tampaknya berfungsi pada semua browser (saya telah menyimpan nomor 1 perbaikan saya di atas pada tahap ini).
Berikut ini tautan dalam diskusi pengembang Google Chrome: https://code.google.com/p/chromium/issues/detail?id=370363#c7
sumber
autocomplete=off
sebagian besar diabaikan di peramban modern - terutama karena pengelola kata sandi, dll.Anda dapat mencoba menambahkan ini
autocomplete="new-password"
tidak sepenuhnya didukung oleh semua browser, tetapi berfungsi pada beberapasumber
autocomplete="off"
biasanya bekerja, tetapi tidak selalu. Itu tergantung padaname
bidang input. Nama-nama seperti "alamat", 'email', 'nama' - akan dilengkapi secara otomatis (browser berpikir mereka membantu pengguna), ketika bidang seperti "kode", "pin" - tidak akan dilengkapi secara otomatis (jikaautocomplete="off"
disetel)Masalah saya adalah - autocomplete mengacaukan bantuan alamat google
Saya memperbaikinya dengan mengubah nama itu
dari
untuk
Diuji dalam chrome 71.
sumber
Alih-alih autocomplete = "off" gunakan autocomplete = "false" ;)
dari: https://stackoverflow.com/a/29582380/75799
sumber
Tidak ada petunjuk mengapa ini berhasil dalam kasus saya, tetapi pada chrome yang saya gunakan
autocomplete="none"
dan Chrome berhenti menyarankan alamat untuk bidang teks saya.sumber
Pada Chrome 42, tidak ada solusi / peretasan di utas ini (mulai dari
2015-05-21T12:50:23+00:00
) yang berfungsi untuk menonaktifkan pelengkapan otomatis untuk bidang individual atau seluruh formulir.EDIT: Saya telah menemukan bahwa Anda sebenarnya hanya perlu memasukkan satu bidang email tiruan ke dalam formulir Anda (Anda dapat menyembunyikannya dengan
display: none
) sebelum bidang lainnya untuk mencegah pelengkapan otomatis. Saya berasumsi bahwa chrome menyimpan semacam tanda tangan formulir dengan setiap bidang isian yang dilengkapi otomatis dan termasuk bidang email lain merusak tanda tangan ini dan mencegah pengisian otomatis.Berita baiknya adalah karena "tanda tangan formulir" rusak oleh ini, tidak ada bidang yang dilengkapi secara otomatis, jadi tidak ada JS yang diperlukan untuk menghapus bidang palsu sebelum dikirim.
Jawaban lama:
Satu-satunya hal yang saya temukan masih dapat dilakukan adalah memasukkan dua bidang dummy jenis email dan kata sandi sebelum bidang nyata. Anda dapat mengaturnya
display: none
untuk menyembunyikannya (tidak cukup pintar untuk mengabaikan bidang itu):Sayangnya, bidang harus dalam formulir Anda (jika tidak, kedua set input diisi otomatis). Jadi, agar bidang palsu benar-benar diabaikan, Anda perlu beberapa JS untuk dijalankan pada formulir kirim untuk menghapusnya:
Perhatikan dari atas bahwa membersihkan nilai dengan Javascript berfungsi untuk mengganti autocomplete. Jadi, jika kehilangan perilaku yang benar dengan JS dinonaktifkan dapat diterima, Anda dapat menyederhanakan semua ini dengan JS "autocomplete" untuk Chrome:
sumber
Saya memiliki masalah serupa di mana bidang input mengambil nama atau email. Saya menetapkan autocomplete = "off" tetapi Chrome masih memaksakan saran. Ternyata itu karena teks placeholder memiliki kata "nama" dan "email" di dalamnya.
Sebagai contoh
Saya mengatasinya dengan menempatkan spasi nol lebar ke dalam kata-kata di placeholder. Tidak ada lagi pelengkapan otomatis Chrome.
sumber
Di Chrome 48+ gunakan solusi ini:
Letakkan bidang palsu sebelum bidang nyata:
Sembunyikan bidang palsu:
Anda berhasil!
Ini juga akan berfungsi untuk versi yang lebih lama.
sumber
autocomplete="off"
padaform
tag. Coba juga memasukkan input palsu segera setelahform
tag.Setelah chrome v. 34, pengaturan
autocomplete="off"
pada<form>
tag tidak berfungsiSaya membuat perubahan untuk menghindari perilaku menjengkelkan ini:
name
danid
dari input kata sandipasswordInput
)(Sejauh ini, Chrome tidak akan memasukkan kata sandi yang disimpan pada input, tetapi formulir sekarang rusak)
Akhirnya, untuk membuat form berfungsi, letakkan kode ini untuk dijalankan ketika pengguna mengklik tombol kirim, atau setiap kali Anda ingin memicu pengiriman formulir:
Dalam kasus saya, saya biasa
id="password" name="password"
memasukkan input kata sandi, jadi saya mengembalikannya sebelum memicu pengiriman.sumber
Setelah mencoba semua solusi, Inilah yang tampaknya berfungsi untuk versi chrome: 45, dengan bidang isian kata sandi:
sumber
Saya baru saja memperbarui ke Chrome 49 dan solusi Diogo Cid tidak berfungsi lagi.
Saya membuat solusi yang berbeda untuk menyembunyikan dan menghapus bidang pada saat run-time setelah halaman dimuat.
Chrome sekarang mengabaikan solusi awal yang menerapkan kredensial ke bidang yang pertama kali ditampilkan
type="password"
dantype="text"
bidang sebelumnya , jadi saya telah menyembunyikan kedua bidang menggunakan CSSvisibility: hidden;
Saya tahu bahwa itu mungkin tampak tidak terlalu elegan tetapi berhasil.
sumber
saya menemukan solusi ini menjadi yang paling tepat:
Itu harus dimuat setelah dom siap, atau setelah formulir merender.
sumber
Sementara saya setuju pelengkapan otomatis harus menjadi pilihan pengguna, ada kalanya Chrome terlalu bersemangat dengannya (peramban lain juga mungkin). Misalnya, bidang kata sandi dengan nama yang berbeda masih diisi secara otomatis dengan kata sandi yang disimpan dan bidang sebelumnya diisi dengan nama pengguna. Ini terutama menyebalkan ketika formulir tersebut adalah formulir manajemen pengguna untuk aplikasi web dan Anda tidak ingin pengisian otomatis diisi dengan kredensial Anda sendiri.
Chrome sepenuhnya mengabaikan pelengkapan otomatis = "mati" sekarang. Sementara peretasan JS mungkin berhasil, saya menemukan cara sederhana yang bekerja pada saat penulisan:
Setel nilai bidang kata sandi ke karakter kontrol 8 (
"\x08"
dalam PHP atau
HTML). Ini menghentikan Chrome mengisi bidang secara otomatis karena memiliki nilai, tetapi tidak ada nilai aktual yang dimasukkan karena ini adalah karakter backspace.Ya ini masih merupakan peretasan, tetapi berhasil bagi saya. YMMV.
sumber
form
untuk membuat pengguna baru dan mengedit yang ada hanya mengesampingkaninput
nilai-nilai melalui JS menghapus lengkapi-otomatis.