Saat menggunakan xhtml1-transitional.dtd
doctype, kumpulkan nomor kartu kredit dengan HTML berikut
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
akan menandai peringatan pada validator W3C:
tidak ada atribut "pelengkapan otomatis".
Apakah ada cara W3C / standar untuk menonaktifkan lengkapi-otomatis peramban pada bidang sensitif dalam formulir?
Jawaban:
Berikut ini adalah artikel bagus dari MDC yang menjelaskan masalah (dan solusi) untuk membentuk pelengkapan otomatis. Microsoft juga telah menerbitkan sesuatu yang serupa di sini .
Sejujurnya, jika ini adalah sesuatu yang penting bagi pengguna Anda, 'melanggar' standar dengan cara ini tampaknya tepat. Misalnya, Amazon menggunakan atribut 'pelengkapan otomatis' sedikit, dan tampaknya berfungsi dengan baik.
Jika Anda ingin menghapus peringatan sepenuhnya, Anda dapat menggunakan JavaScript untuk menerapkan atribut ke browser yang mendukungnya (IE dan Firefox adalah browser penting) menggunakan
someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
Terakhir, jika situs Anda menggunakan HTTPS, IE secara otomatis mematikan pelengkapan otomatis (seperti yang dilakukan beberapa peramban lain, sejauh yang saya tahu).
Memperbarui
Karena jawaban ini masih mendapatkan beberapa peningkatan, saya hanya ingin menunjukkan bahwa dalam HTML5, Anda dapat menggunakan atribut 'pelengkapan otomatis' pada elemen formulir Anda. Lihat dokumentasi pada W3C untuk itu.
sumber
autocomplete
dapat digunakan tidak hanya padaform
elemen , danoff
nilai berfungsi setidaknya dichromium-40.0.2214.115
Saya akan sangat terkejut jika W3C akan mengusulkan cara yang akan bekerja dengan (X) HTML4. Fitur autocomplete sepenuhnya berbasis browser, dan diperkenalkan selama beberapa tahun terakhir (setelah standar HTML4 ditulis).
Tidak akan heran jika HTML5 akan memilikinya.
Sunting: Seperti yang saya duga, HTML5 memang memiliki fitur itu. Untuk mendefinisikan halaman Anda sebagai HTML5, gunakan DOCTYPE berikut (yaitu: letakkan ini sebagai teks pertama dalam kode sumber Anda). Perhatikan bahwa tidak semua browser mendukung standar ini, karena masih dalam bentuk konsep.
sumber
HTML 4 : Tidak
HTML 5 : Ya
Referensi: W3
sumber
Tidak, tetapi pelengkapan otomatis peramban sering dipicu oleh bidang yang memiliki
name
atribut yang sama dengan bidang yang sebelumnya diisi. Jika Anda bisa memasang cara cerdas untuk memiliki nama bidang acak , pelengkapan otomatis tidak akan dapat menarik nilai yang dimasukkan sebelumnya untuk bidang tersebut.Jika Anda memberi bidang input nama seperti "
email_<?= randomNumber() ?>
", dan kemudian memiliki skrip yang menerima loop data ini melalui variabel POST atau GET mencari sesuatu yang cocok dengan pola "email_[some number]
", Anda bisa melakukan ini, dan ini akan memiliki ( praktis) dijamin berhasil, apa pun perambannya .sumber
Tidak, artikel bagus ada di sini di Mozila Wiki .
Saya akan terus menggunakan yang tidak valid
attribute
. Saya pikir di sinilah pragmatisme harus menang atas validasi.sumber
Bagaimana kalau mengaturnya dengan JavaScript?
Itu tidak sempurna, tetapi HTML Anda akan valid.
sumber
Saya sarankan menangkap semua 4 jenis input:
Referensi:
sumber
:input
jugaJika Anda menggunakan jQuery, Anda dapat melakukan sesuatu seperti itu:
dan gunakan kelas autocompleteOff di mana Anda inginkan:
Jika Anda ingin SEMUA input Anda menjadi
autocomplete=off
, Anda cukup menggunakannya:sumber
autocomplete
atribut (tidak valid) dengan cara yang berbeda selain di html$('input.autocompleteOff').val('');
yang tampaknya OK.Cara lain - yang juga akan membantu keamanan adalah dengan memanggil kotak input sesuatu yang berbeda setiap kali Anda menampilkannya: seperti captha. Dengan begitu, sesi dapat membaca input satu kali saja dan Auto-Complete tidak memiliki apa-apa untuk melanjutkan.
Hanya satu poin tentang pertanyaan rmeador tentang apakah Anda harus mengganggu pengalaman browser: Kami mengembangkan sistem Manajemen Kontak & CRM, dan ketika Anda mengetik data orang lain ke dalam formulir yang Anda tidak ingin itu terus-menerus menyarankan rincian Anda sendiri.
Ini berfungsi untuk kebutuhan kita, tetapi kemudian kita memiliki kemewahan memberitahu pengguna untuk mendapatkan browser yang layak :)
sumber
autocomplete="off"
ini harus memperbaiki masalah untuk semua browser modern.Pada versi browser Gecko saat ini, atribut autocomplete berfungsi dengan sempurna. Untuk versi sebelumnya, kembali ke Netscape 6.2, ini berfungsi dengan pengecualian untuk formulir dengan "Alamat" dan "Nama"
Memperbarui
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:
Karena nilai acak ini bukan a
valid one
, browser akan menyerah.Dokumentasi
sumber
Menggunakan atribut 'nama' acak bekerja untuk saya.
Saya mereset atribut nama saat mengirim formulir sehingga Anda masih dapat mengaksesnya dengan nama saat formulir dikirim. (menggunakan atribut id untuk menyimpan nama)
sumber
Perhatikan bahwa ada beberapa kebingungan tentang lokasi atribut autocomplete. Ini dapat diterapkan baik untuk seluruh tag FORMULIR atau untuk masing-masing tag INPUT, dan ini tidak benar-benar standar sebelum HTML5 (yang secara eksplisit memungkinkan kedua lokasi ). Dokumen lama terutama artikel Mozilla ini hanya menyebutkan tag FORM. Pada saat yang sama beberapa pemindai keamanan hanya akan mencari pelengkapan otomatis dalam tag INPUT dan mengeluh jika itu hilang (bahkan jika itu ada di FORM induknya). Analisis yang lebih rinci dari kekacauan ini diposting di sini: Kebingungan tentang AUTOCOMPLETE = OFF atribut dalam bentuk HTML .
sumber
Tidak ideal, tetapi Anda dapat mengubah id dan nama kotak teks setiap kali Anda merendernya - Anda harus melacaknya juga dari sisi server sehingga Anda bisa mengeluarkan data.
Tidak yakin apakah ini akan berhasil atau tidak, hanya sebuah pemikiran.
sumber
Saya pikir ada cara yang lebih sederhana. Buat input tersembunyi dengan nama acak (via javascript) dan atur nama pengguna untuk itu. Ulangi dengan kata sandi. Dengan cara ini skrip backend Anda tahu persis nama bidang yang sesuai, sambil tetap melengkapi otomatis dalam gelap.
Saya mungkin salah, tapi itu hanya ide.
sumber
sumber
Solusi ini bekerja dengan saya:
jika Anda ingin menggunakan isiOtomatis di wilayah ini: tambahkan
autocomplete="false"
elemen ex:sumber
Pelengkapan otomatis valid tidak aktif
sumber