Bagaimana cara mendeteksi ctrl+ v, ctrl+ cmenggunakan Javascript?
Saya perlu membatasi menempel di textareas saya, pengguna akhir tidak boleh menyalin dan menempelkan konten, pengguna hanya harus mengetik teks di textarea.
Bagaimana cara mencapai ini?
javascript
jquery
html
Ramakrishnan
sumber
sumber
Jawaban:
Saya hanya melakukan ini karena minat. Saya setuju itu bukan hal yang benar untuk dilakukan, tetapi saya pikir itu harus menjadi keputusan op ... Juga kode dapat dengan mudah diperluas untuk menambah fungsionalitas, daripada mengambilnya (seperti clipboard yang lebih maju, atau Ctrl+ smemicu server -selain hemat).
Juga hanya untuk memperjelas, skrip ini membutuhkan pustaka jQuery.
Demo codepen
EDIT: menghapus 3 baris berlebihan (melibatkan e.yang) berkat saran Tim Down (lihat komentar)
EDIT: menambahkan dukungan untuk Mac ( cmdbukan kunci ctrl)
sumber
keydown
dankeyup
penangannya aktifdocument
? Anda dapat menguji tombol Ctrl di$(".no-copy-paste").keydown
handler. Juga, tidak perlu untuke.keyCode || e.which
bit:e.keyCode
bekerja di semua browser yange.which
berfungsi, jadie.which
tidak akan pernah digunakan. Mungkin Anda memikirkan bagaimana Anda mendapatkan kode karakter dari suatukeypress
acara? Akhirnya, ini tidak akan melakukan apa pun tentang pasta dari konteks atau mengedit menu, tapi saya kira OP tidak bertanya langsung tentang itu.e.metaKey
ataue.ctrlKey
menjaditrue
alih - alih menetapkan nilai angka ke kunci dan menguji mereka.Dengan jquery Anda dapat dengan mudah mendeteksi salin, tempel, dll dengan mengikat fungsi:
Informasi lebih lanjut di sini: http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/
sumber
Meskipun bisa mengganggu ketika digunakan sebagai langkah anti-pembajakan, saya bisa melihat mungkin ada beberapa contoh di mana itu akan sah, jadi:
Saya telah menggunakan
event.ctrlKey
daripada memeriksa kode kunci seperti pada sebagian besar browser di Mac OS X Ctrl/ Alt"turun" dan "naik" peristiwa tidak pernah dipicu, jadi satu-satunya cara untuk mendeteksi adalah dengan menggunakanevent.ctrlKey
dalam acara c misalnya setelah Ctrlkuncinya adalah diturunkan. Saya juga menggantictrlKey
denganmetaKey
untuk mac.Keterbatasan metode ini:
edit
->copy
item menu di misalnya Firefox masih dapat memungkinkan copy / paste.sumber
Ada cara lain untuk melakukan hal ini:
onpaste
,oncopy
danoncut
peristiwa dapat terdaftar dan dibatalkan pada IE, Firefox, Chrome, Safari (dengan beberapa masalah kecil), browser hanya utama yang tidak memungkinkan membatalkan peristiwa ini adalah Opera.Seperti yang Anda lihat di jawaban saya yang lain, menyadap Ctrl+ vdan Ctrl+ cmemiliki banyak efek samping, dan itu masih tidak mencegah pengguna menyisipkan menggunakan
Edit
menu Firefox dll.Safari masih memiliki beberapa masalah kecil dengan metode ini (ini menghapus clipboard menggantikan cut / copy ketika mencegah default) tetapi bug itu tampaknya telah diperbaiki di Chrome sekarang.
Lihat juga: http://www.quirksmode.org/dom/events/cutcopypaste.html dan halaman pengujian terkait http://www.quirksmode.org/dom/events/tests/cutcopypaste.html untuk informasi lebih lanjut.
sumber
Demo Langsung: http://jsfiddle.net/abdennour/ba54W/
sumber
Solusi singkat untuk mencegah pengguna menggunakan menu konteks, menyalin dan memotong jQuery:
Juga menonaktifkan pemilihan teks di CSS mungkin berguna:
sumber
Jika Anda menggunakan
ctrlKey
properti, Anda tidak perlu mempertahankan status.sumber
Saya menulis plugin jQuery, yang menangkap penekanan tombol. Ini dapat digunakan untuk mengaktifkan input skrip berbagai bahasa dalam bentuk html tanpa OS (kecuali font). Sekitar 300 baris kode, mungkin Anda ingin melihatnya:
Secara umum, berhati-hatilah dengan perubahan seperti itu. Saya menulis plugin untuk klien karena solusi lain tidak tersedia.
sumber
Anda dapat menggunakan kode ini untuk klik kanan, CTRL+ C, CTRL+ V, CTRL+ Xmendeteksi dan mencegah tindakan mereka
sumber
alih-alih menekan tombol, gunakan onkeydown.
sumber
Pendekatan lain (tidak memerlukan plugin) hanya untuk menggunakan
ctrlKey
properti dari objek acara yang akan diteruskan. Ini menunjukkan jika Ctrlditekan pada saat acara, seperti ini:Lihat juga jquery: penekanan tombol, ctrl + c (atau kombo seperti itu) .
sumber
Jangan lupa bahwa, meskipun Anda mungkin dapat mendeteksi dan memblokir Ctrl+ C/ V, Anda masih dapat mengubah nilai bidang tertentu.
Contoh terbaik untuk ini adalah fungsi Elemen Inspeksi Chrome, ini memungkinkan Anda untuk mengubah properti nilai suatu bidang.
sumber
saya sudah memiliki masalah Anda dan saya menyelesaikannya dengan kode berikut .. yang hanya menerima angka
Anda dapat mendeteksi Ctrlid
e.which == 17
sumber
Anda dapat mendengarkan acara penekanan tombol, dan menghentikan acara default (memasukkan teks) jika cocok dengan kode kunci tertentu.
sumber
Catatan penting
Saya menggunakan
e.keyCode
untuk sementara waktu dan saya mendeteksi bahwa ketika saya menekan ctrl+ ., atribut ini mengembalikan nomor yang salah, 190, sedangkan kode ascii.
adalah 46!Jadi sebaiknya Anda gunakan
e.key.toUpperCase().charCodeAt(0)
sajae.keyCode
.sumber
Ada beberapa cara untuk mencegahnya.
Namun, pengguna akan selalu dapat mematikan javascript atau hanya melihat pada kode sumber halaman.
Beberapa contoh (memerlukan jQuery)
Sunting: Bagaimana Tim Down berkata, semua fungsi ini adalah tanggungan browser.
sumber
paste
acara, yang mencakup semua versi Firefox sebelum versi 3. Kedua,window.clipboardData
hanya IE dan saya percaya sekarang dinonaktifkan secara default di IE . Ketiga, menonaktifkan semuakeydown
peristiwa di mana tombol Ctrl ditekan berlebihan: Anda mencegah pintasan keyboard yang bermanfaat seperti Ctrl-A (pilih semua) dan Ctrl-Z (batalkan). Keempat, seperti yang disebutkan oleh orang lain, ini adalah hal yang sangat buruk untuk dilakukan.