Saya telah mengalami masalah dengan perilaku pengisian otomatis chrome pada beberapa bentuk.
Bidang dalam formulir semua memiliki nama yang sangat umum dan akurat, seperti "email", "nama", atau "kata sandi", dan semuanya juga telah autocomplete="off"
ditetapkan.
Bendera pelengkapan otomatis telah berhasil menonaktifkan perilaku pelengkapan otomatis, tempat dropdown nilai muncul saat Anda mulai mengetik, tetapi belum mengubah nilai yang dipopulasikan secara otomatis oleh Chrome pada bidang yang diisi.
Perilaku ini akan baik-baik saja kecuali bahwa chrome mengisi input dengan tidak benar, misalnya mengisi input telepon dengan alamat email. Pelanggan mengeluh tentang hal ini, jadi ini diverifikasi terjadi dalam beberapa kasus, dan bukan karena semacam hasil dari sesuatu yang telah saya lakukan secara lokal pada mesin saya.
Satu-satunya solusi saat ini yang dapat saya pikirkan adalah secara dinamis menghasilkan nama input khusus dan kemudian mengekstrak nilai-nilai di backend, tetapi ini sepertinya cara yang cukup rumit untuk mengatasi masalah ini. Apakah ada tag atau quirks yang mengubah perilaku pengisian otomatis yang dapat digunakan untuk memperbaikinya?
sumber
Jawaban:
Untuk versi Chrome baru, Anda cukup memasukkan
autocomplete="new-password"
bidang kata sandi dan hanya itu. Saya sudah memeriksanya, bekerja dengan baik.Dapatkan kiat itu dari pengembang Chrome dalam diskusi ini: https://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7
PS Perhatikan bahwa Chrome akan berupaya menyimpulkan perilaku isi-otomatis dari nama, id, dan konten teks apa pun yang dapat diperolehnya di sekitar bidang termasuk label dan simpul teks yang sewenang-wenang. Jika ada token pelengkapan otomatis seperti
street-address
dalam konteks, Chrome akan melakukan pengisian otomatis seperti itu. Heuristik bisa sangat membingungkan karena kadang-kadang hanya memicu jika ada bidang tambahan dalam formulir, atau tidak jika ada terlalu sedikit bidang dalam formulir. Perhatikan juga bahwaautocomplete="no"
akan berfungsi tetapiautocomplete="off"
tidak karena alasan historis.autocomplete="no"
adalah Anda memberi tahu browser bahwa bidang ini harus diisi otomatis sebagai bidang yang disebut"no"
. Jika Anda menghasilkanautocomplete
nama acak unik, Anda menonaktifkan pelengkapan otomatis.Jika pengguna Anda mengunjungi formulir yang salah, informasi isi ulang otomatisnya mungkin rusak . Menyuruh mereka masuk secara manual dan memperbaiki informasi pengisian otomatis di Chrome mungkin merupakan tindakan yang perlu diambil dari mereka.
sumber
Saya baru saja menemukan bahwa jika Anda memiliki nama pengguna dan kata sandi yang diingat untuk sebuah situs, versi Chrome saat ini akan secara otomatis mengisi nama pengguna / alamat email Anda ke dalam bidang sebelum
type=password
bidang apa pun . Tidak peduli bidang apa yang disebut - anggap saja bidang tersebut sebelum kata sandi menjadi nama pengguna Anda.Solusi lama
Cukup gunakan
<form autocomplete="off">
dan itu mencegah kata sandi prefilling serta segala jenis pengisian heuristik bidang berdasarkan asumsi browser dapat membuat (yang sering salah). Berbeda dengan menggunakan<input autocomplete="off">
yang tampaknya cukup banyak diabaikan oleh autofill kata sandi (di Chrome, Firefox tidak mematuhinya).Solusi Terbaru
Chrome sekarang mengabaikan
<form autocomplete="off">
. Oleh karena itu solusi awal saya (yang telah saya hapus) sekarang menjadi hal yang populer.Cukup buat beberapa bidang dan buat mereka disembunyikan dengan "display: none". Contoh:
Lalu letakkan bidang nyata Anda di bawahnya.
Ingatlah untuk menambahkan komentar atau orang lain di tim Anda akan bertanya-tanya apa yang Anda lakukan!
Pembaruan Maret 2016
Baru diuji dengan Chrome terbaru - semuanya baik. Ini adalah jawaban yang cukup lama sekarang tetapi saya hanya ingin menyebutkan bahwa tim kami telah menggunakannya selama bertahun-tahun sekarang di puluhan proyek. Ini masih berfungsi dengan baik meskipun ada beberapa komentar di bawah ini. Tidak ada masalah dengan aksesibilitas karena bidang
display:none
berarti mereka tidak mendapatkan fokus. Seperti yang saya sebutkan, Anda harus meletakkannya di depan bidang Anda yang sebenarnya.Jika Anda menggunakan javascript untuk memodifikasi formulir Anda, ada trik tambahan yang Anda perlukan. Perlihatkan bidang palsu saat Anda memanipulasi formulir dan kemudian sembunyikan lagi milidetik kemudian.
Kode contoh menggunakan jQuery (dengan asumsi Anda memberikan kelas bidang palsu Anda):
Perbarui Juli 2018
Solusi saya tidak lagi berfungsi dengan baik karena para pakar anti-kegunaan Chrome telah bekerja keras. Tapi mereka telah memberi kita tulang dalam bentuk:
Ini berfungsi dan sebagian besar memecahkan masalah.
Namun, itu tidak berfungsi ketika Anda tidak memiliki bidang kata sandi tetapi hanya alamat email. Itu juga bisa sulit untuk membuatnya berhenti menjadi kuning dan prefilling. Solusi bidang palsu dapat digunakan untuk memperbaikinya.
Bahkan terkadang Anda harus memasukkan dua bidang palsu, dan mencobanya di tempat yang berbeda. Misalnya, saya sudah memiliki bidang palsu di awal formulir saya, tetapi Chrome baru-baru ini mulai mengisi kembali bidang 'Email' saya - jadi saya menggandakan dan memasukkan lebih banyak bidang palsu tepat sebelum bidang 'Email', dan itu memperbaikinya . Menghapus bidang pertama atau kedua bidang akan kembali ke pengisian otomatis terlalu banyak yang salah.
Perbarui Mar 2020
Tidak jelas apakah dan kapan solusi ini masih berfungsi. Tampaknya masih berfungsi kadang-kadang tetapi tidak setiap saat.
Dalam komentar di bawah ini Anda akan menemukan beberapa petunjuk. Satu yang baru saja ditambahkan oleh @anilyeni mungkin perlu diselidiki lebih lanjut:
Seperti yang saya perhatikan,
autocomplete="off"
berfungsi di Chrome 80, JIKA ada kurang dari 3 elemen di<form>
. Saya tidak tahu apa logika atau di mana dokumentasi terkait tentang hal itu.Yang ini dari @dubrox mungkin relevan, walaupun saya belum mengujinya:
terima kasih banyak untuk triknya, tapi tolong perbarui jawabannya, karena
display:none;
tidak berfungsi lagi, tetapiposition: fixed;top:-100px;left:-100px; width:5px;
tidak :)Perbarui APRIL 2020
Nilai khusus untuk chrome untuk atribut ini adalah melakukan pekerjaan: (diuji pada input - tetapi tidak oleh saya)
autocomplete="chrome-off"
sumber
autocomplete="I told you I wanted this off, Google. But you would not listen."
Setelah berbulan-bulan perjuangan, saya telah menemukan bahwa solusinya jauh lebih sederhana daripada yang Anda bayangkan:
Alih-alih
autocomplete="off"
digunakanautocomplete="false"
;)Sesederhana itu, dan itu berfungsi seperti pesona di Google Chrome juga!
Pembaruan Agustus 2019 (dikreditkan ke @JonEdiger dalam komentar)
Catatan: banyak info online mengatakan browser sekarang memperlakukan autocomplete = 'false' sama dengan autocomplete = 'off'. Setidaknya pada saat ini juga, itu mencegah pelengkapan otomatis untuk ketiga browser tersebut.
Setel pada level form dan kemudian untuk input yang Anda inginkan, setel ke beberapa nilai yang tidak valid seperti 'tidak ada':
sumber
Kadang-kadang bahkan
autocomplete=off
tidak akan mencegah mengisi kredensial ke bidang yang salah.Solusinya adalah dengan menonaktifkan isi-otomatis browser menggunakan mode baca-saja dan mengatur fokus yang dapat ditulis pada:
The
focus
peristiwa terjadi di klik mouse dan tabbing melalui bidang.Memperbarui:
Mobile Safari menetapkan kursor di lapangan, tetapi tidak menampilkan keyboard virtual. Solusi baru ini berfungsi seperti sebelumnya, tetapi menangani keyboard virtual:
Demo Langsung https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
Penjelasan: Browser otomatis mengisi kredensial ke bidang teks yang salah?
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 contoh terakhir dan Anda tidak dapat mengontrolnya,
Perbaikan baca-baca di atas ini berhasil untuk saya.
sumber
dummy
lalu menghapus nilai lagi? Menambah dan menghapus suara yang hanya dibaca seperti langkah berbahaya - bagaimana jika browser tidak ingin Anda fokus padanya?Jika Anda menerapkan fitur kotak pencarian, coba atur
type
atributnyasearch
sebagai berikut:Ini berfungsi untuk saya di Chrome v48 dan tampaknya merupakan markup yang sah:
https://www.w3.org/wiki/HTML/Elements/input/search
sumber
Coba ini. Saya tahu pertanyaannya agak lama, tetapi ini adalah pendekatan yang berbeda untuk masalahnya.
Saya juga memperhatikan masalah tersebut muncul tepat di atas
password
lapangan.Saya mencoba kedua metode seperti
<form autocomplete="off">
dan<input autocomplete="off">
tetapi tidak ada yang bekerja untuk saya.Jadi saya memperbaikinya menggunakan potongan di bawah ini - baru saja menambahkan bidang teks lain tepat di atas bidang jenis kata sandi dan membuatnya
display:none
.Sesuatu seperti ini:
Semoga ini bisa membantu seseorang.
sumber
password
dan memilikiactual_password
bidang yang sah, karena Google sekarang tampaknya melihatname
. Namun, ini berarti Chrome tidak akan menyimpan kata sandi, yang merupakan fungsi yang sebenarnya saya inginkan . AAAAARRRRGHH!Saya tidak tahu mengapa, tetapi ini membantu dan bekerja untuk saya.
Saya tidak tahu mengapa, tetapi autocompelete = "new-password" menonaktifkan autofill. Ini bekerja di versi chrome 49.0.2623.112 terbaru .
sumber
Bagi saya sederhana
Melakukannya.
Diuji pada beberapa versi, percobaan terakhir ada di 56.0.2924.87
sumber
Anda harus menambahkan atribut ini:
Tautan Sumber: Artikel Lengkap
sumber
Ini sangat sederhana dan rumit :)
google chrome pada dasarnya mencari setiap elemen kata sandi pertama yang terlihat di dalam
<form>
,<body>
dan<iframe>
tag untuk mengaktifkan isi ulang otomatis untuk mereka, jadi untuk menonaktifkan ini Anda perlu menambahkan elemen kata sandi dummy sebagai berikut:jika elemen kata sandi Anda di dalam
<form>
tag, Anda harus meletakkan elemen dummy sebagai elemen pertama dalam formulir Anda segera setelah<form>
tag terbukajika elemen kata sandi Anda tidak di dalam
<form>
tag, masukkan elemen dummy sebagai elemen pertama di halaman html Anda segera setelah<body>
tag terbukaAnda perlu menyembunyikan elemen dummy tanpa menggunakan css
display:none
jadi pada dasarnya gunakan yang berikut ini sebagai elemen kata sandi dummy.sumber
<form *ngIf="!loggedIn()" #loginForm="ngForm" class="navbar-form navbar-right" (ngSubmit)="login()"><input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/><input type="text" #username="ngModel" placeholder="Username" class="form-control" required autocomplete="off" name="username" [(ngModel)]="model.username"><input type="password" #password="ngModel" placeholder="Password" class="form-control" required autocomplete="off" name="password" [(ngModel)]="model.password">...
Inilah solusi yang saya usulkan, karena Google bersikeras untuk mengesampingkan setiap penyelesaian yang tampaknya dilakukan orang.
Opsi 1 - pilih semua teks saat klik
Tetapkan nilai input ke contoh untuk pengguna Anda (misalnya
[email protected]
), atau label bidang (misalnyaEmail
) dan tambahkan kelas yang dipanggilfocus-select
ke input Anda:Dan inilah jQuery:
Saya benar-benar tidak bisa melihat Chrome mengotak-atik nilai. Itu gila. Jadi semoga ini adalah solusi yang aman.
Opsi 2 - setel nilai email ke spasi, lalu hapus
Dengan asumsi Anda memiliki dua input, seperti email dan kata sandi, setel nilai bidang email ke
" "
(spasi) dan tambahkan atribut / nilaiautocomplete="off"
, lalu hapus ini dengan JavaScript. Anda dapat membiarkan nilai kata sandi kosong.Jika pengguna tidak memiliki JavaScript untuk beberapa alasan, pastikan Anda memotong sisi server input mereka (Anda mungkin harus tetap), jika mereka tidak menghapus ruang.
Inilah jQuery:
Saya menetapkan batas waktu
15
karena5
sepertinya berfungsi sesekali dalam pengujian saya, jadi trebling angka ini sepertinya merupakan taruhan yang aman.Gagal menyetel nilai awal ke spasi menghasilkan Chrome meninggalkan input sebagai warna kuning, seolah-olah telah mengisinya secara otomatis.
Opsi 3 - input tersembunyi
Letakkan ini di awal formulir:
CSS:
Pastikan Anda menyimpan catatan HTML sehingga pengembang lain Anda tidak menghapusnya! Pastikan juga nama input yang disembunyikan relevan.
sumber
Gunakan css text-security: disc tanpa menggunakan type = password .
html
css
sumber
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 pelengkapan otomatis adalah dengan menetapkan string acak ke atribut , misalnya:
sumber
Saya menemukan bahwa menambahkan ini ke formulir mencegah Chrome menggunakan IsiOtomatis.
Ditemukan di sini https://code.google.com/p/chromium/issues/detail?id=468153#hc41
Sangat mengecewakan bahwa Chrome telah memutuskan bahwa ia tahu lebih baik daripada pengembang tentang kapan harus Pelengkapan Otomatis. Microsoft benar-benar merasakannya.
sumber
menambahkan atribut readonly ke tag bersama dengan peristiwa onfocus menghapusnya memperbaiki masalah
sumber
Untuk kombo kata sandi nama pengguna, ini adalah masalah yang mudah diselesaikan. Heuristik Chrome mencari polanya:
diikuti oleh:
Hancurkan saja proses ini dengan membatalkan ini:
sumber
Mike Nelsons memberikan solusi yang tidak berfungsi untuk saya di Chrome 50.0.2661.102 m. Cukup menambahkan elemen input dari jenis yang sama dengan tampilan: tidak ada set yang tidak lagi menonaktifkan peramban-otomatis asli. Sekarang perlu untuk menduplikasi atribut nama dari bidang input yang Anda ingin menonaktifkan lengkapi-otomatis.
Juga, untuk menghindari duplikasi bidang input ketika mereka berada di dalam elemen formulir Anda harus menempatkan dinonaktifkan pada elemen yang tidak ditampilkan. Ini akan mencegah elemen itu diajukan sebagai bagian dari tindakan formulir.
sumber
Pada 2016 Google Chrome mulai mengabaikannya
autocomplete=off
meskipun dalam W3C. Jawaban yang mereka posting :Yang pada dasarnya mengatakan: kita lebih tahu apa yang diinginkan pengguna.
Mereka membuka bug lain untuk mengirim kasus penggunaan yang valid saat autocomplete = off diperlukan
Saya belum melihat masalah yang terhubung dengan autocomplete melalui semua aplikasi B2B saya tetapi hanya dengan input dari jenis kata sandi.
IsiOtomatis masuk jika ada bidang kata sandi di layar, bahkan yang tersembunyi. Untuk mematahkan logika ini, Anda dapat memasukkan setiap bidang kata sandi ke dalam bentuknya sendiri jika itu tidak merusak logika halaman Anda.
sumber
autocomplete="pineapple"
atau omong kosong lain juga sepertinya memperbaiki masalahnya? Setidaknya, itu terjadi pada saya!Jika Anda mengalami masalah dengan menjaga placeholder tetapi menonaktifkan autofill chrome saya menemukan solusi ini.
Masalah
HTML
http://jsfiddle.net/xmbvwfs6/1/
Contoh di atas masih menghasilkan masalah IsiOtomatis, tetapi jika Anda menggunakan
required="required"
dan beberapa CSS Anda dapat meniru placeholder dan Chrome tidak akan mengambil tag.Larutan
HTML
CSS
http://jsfiddle.net/mwshpx1o/1/
sumber
input
fokus jika pengguna mengklik placeholder "palsu":$("label").on("click",function(){ $(this).prev().focus(); });
Perhatikan bahwalabel
tidak boleh sebeluminput
... Chrome menemukannya! Solusi kreatif yang bagus! +1Saya benar-benar tidak suka membuat bidang tersembunyi, saya pikir membuatnya seperti itu akan sangat membingungkan dengan sangat cepat.
Pada kolom input yang ingin Anda hentikan dari lengkapi otomatis ini akan berfungsi. Buat bidang hanya baca dan pada fokus hapus atribut itu seperti ini
apa yang dilakukan adalah pertama-tama Anda harus menghapus atribut read only dengan memilih bidang dan pada saat itu kemungkinan besar Anda akan diisi dengan input pengguna Anda sendiri dan membungkuk autofill untuk mengambil alih
sumber
Nilai yang dimasukkan sebelumnya yang di-cache oleh chrome ditampilkan sebagai daftar pilih dropdown. Ini dapat dinonaktifkan dengan autocomplete = off, alamat yang disimpan secara eksplisit dalam pengaturan lanjutan chrome memberikan sembulan isi-otomatis ketika sebuah bidang alamat menjadi fokus. Hal ini dapat dinonaktifkan oleh autocomplete = "false" .Tapi itu akan memungkinkan chrome untuk menampilkan nilai cache dalam dropdown.
Pada bidang input html berikut ini akan mematikan keduanya.
Role="presentation" & autocomplete="off"
Saat memilih bidang input untuk alamat isi ulang otomatis, Chrome mengabaikan bidang input yang tidak memiliki elemen label html sebelumnya.
Untuk memastikan parser chrome mengabaikan bidang input untuk sembulan alamat pengisian otomatis, tombol tersembunyi atau kontrol gambar dapat ditambahkan antara label dan kotak teks. Ini akan memecah urutan penguraian chrome dari pembuatan pasangan -input label untuk pengisian otomatis. Kotak centang diabaikan saat menguraikan bidang alamat
Chrome juga mempertimbangkan atribut "untuk" pada elemen label. Dapat digunakan untuk memecah urutan parsing krom.
sumber
Yah karena kita semua memiliki masalah ini, saya menginvestasikan waktu untuk menulis ekstensi jQuery yang berfungsi untuk masalah ini. Google harus mengikuti markah html, bukan kita mengikuti Google
Cukup tambahkan ini ke file seperti / js / jquery.extends.js dan sertakan setelah jQuery. Menerapkannya ke setiap elemen formulir pada memuat dokumen seperti ini:
jsfiddle dengan tes
sumber
Coba
jQuery
kode berikut yang berhasil bagi saya.sumber
autocomplete="off"
ke kolom input alih-alih menggunakan jquery. Dan omong-omong, ini tidak berhasil. Saran kata sandi Chrome masih muncul.Ada dua bagian untuk ini. Chrome dan peramban lain akan mengingat nilai yang dimasukkan sebelumnya untuk nama bidang, dan memberikan daftar pelengkapan otomatis kepada pengguna berdasarkan hal itu (terutama, input jenis kata sandi tidak pernah diingat dengan cara ini, untuk alasan yang cukup jelas). Anda dapat menambahkan
autocomplete="off"
untuk mencegah hal ini pada hal-hal seperti bidang email Anda.Namun, Anda kemudian memiliki pengisi kata sandi. Sebagian besar browser memiliki implementasi bawaannya sendiri dan ada juga banyak utilitas pihak ketiga yang menyediakan fungsionalitas ini. Ini, kamu tidak bisa berhenti. Ini adalah pengguna yang membuat pilihan mereka sendiri untuk menyimpan informasi ini untuk secara otomatis diisi kemudian, dan sepenuhnya di luar ruang lingkup dan lingkup pengaruh aplikasi Anda.
sumber
autocomplete="off"
. Ini mungkin maksud adalah untuk menghapusnya, tapi itu tidak pernah secara eksplisit menyatakan, dan ada pasti tidak ada yang membutuhkan lompatan mental. Mereka mungkin hanya ingin mempertimbangkan alternatif atau cara yang lebih baik untuk mengobatinya. Apapun, itu masih bagian dari spec, dan sekali lagi, tidak ada indikasi bahwa ia akan meninggalkan spec juga. Dan, itu masih berfungsi di semua browser sejauh yang saya ketahui, termasuk Chrome.Sesuai laporan bug Chromium # 352347 Chrome tidak lagi menghormati
autocomplete="off|false|anythingelse"
, baik pada formulir maupun pada input.Satu-satunya solusi yang berhasil bagi saya adalah menambahkan bidang kata sandi dummy :
sumber
Dengan mengatur
autocomplete
agaroff
berfungsi di sini saya punya contoh yang digunakan oleh google di halaman pencarian. Saya menemukan ini dari elemen inspeksi.sunting : Jika
off
tidak berfungsi maka cobafalse
ataunofill
. Dalam kasus saya ini berfungsi dengan versi chrome 48.0sumber
Inilah hack kotor -
Anda memiliki elemen Anda di sini (menambahkan atribut yang dinonaktifkan):
Dan kemudian di bagian bawah halaman web Anda menaruh beberapa JavaScript:
sumber
Solusi berbeda, berbasis webkit. Seperti yang telah disebutkan, kapan pun Chrome menemukan bidang kata sandi, ia akan melengkapi email secara otomatis. AFAIK, ini terlepas dari autocomplete = [apa pun].
Untuk menghindari hal ini ubah jenis input ke teks dan terapkan font keamanan webkit dalam bentuk apa pun yang Anda inginkan.
Dari apa yang saya lihat ini setidaknya seaman input type = kata sandi, itu copy dan paste aman. Namun itu rentan dengan menghapus gaya yang akan menghapus tanda bintang, tentu saja tipe input = kata sandi dapat dengan mudah diubah menjadi tipe input = teks di konsol untuk mengungkapkan setiap kata sandi yang diisi otomatis sehingga sangat mirip.
sumber
type="password"
sekarang.Satu-satunya cara yang bekerja untuk saya adalah: (diperlukan jQuery)
sumber
Saya menghadapi masalah yang sama. Dan di sini adalah solusi untuk menonaktifkan nama pengguna & kata sandi diisi otomatis di Chrome (hanya diuji dengan Chrome saja)
sumber