Ketika Anda membawa kartu di Trello dan tekan Ctrl+C , URL kartu ini disalin ke clipboard. bagaimana mereka melakukan ini?
Sejauh yang saya tahu, tidak ada film Flash yang terlibat. Saya telah menginstal Flashblock , dan tab jaringan Firefox tidak menunjukkan film Flash dimuat. (Itu metode yang biasa, misalnya, oleh ZeroClipboard.)
Bagaimana mereka mencapai keajaiban ini?
(Tepat pada saat ini saya pikir saya memiliki epifani: Anda tidak dapat memilih teks pada halaman, jadi saya menganggap mereka memiliki elemen tak terlihat, di mana mereka membuat pemilihan teks melalui kode JavaScript, dan Ctrl+ Cmemicu perilaku default browser, menyalin yang tidak terlihat nilai teks simpul.)
javascript
coffeescript
clipboard
trello
Boldewyn
sumber
sumber
Jawaban:
Pengungkapan: Saya menulis kode yang digunakan Trello ; kode di bawah ini adalah kode sumber aktual yang digunakan Trello untuk menyelesaikan trik clipboard.
Kami sebenarnya tidak "mengakses clipboard pengguna", melainkan kami membantu pengguna keluar sedikit dengan memilih sesuatu yang bermanfaat ketika mereka menekan Ctrl+ C.
Kedengarannya seperti Anda sudah mengetahuinya; kami mengambil keuntungan dari kenyataan bahwa ketika Anda ingin menekan Ctrl+ C, Anda harus menekan Ctrltombol terlebih dahulu. Ketika Ctrltombol ditekan, kita memunculkan teks yang berisi teks yang ingin kita akhiri di clipboard, dan pilih semua teks di dalamnya, sehingga pemilihan semua diatur ketika tombol Cditekan. (Kemudian kita menyembunyikan textarea saat Ctrlkunci muncul)
Secara khusus, Trello melakukan ini:
Di DOM kita punya
CSS untuk hal-hal clipboard:
... dan CSS membuatnya sehingga Anda tidak bisa benar-benar melihat textarea ketika muncul ... tapi itu "terlihat" cukup untuk menyalin.
Ketika Anda mengarahkan kursor ke atas kartu, kartu itu memanggil
... jadi penolong clipboard tahu apa yang harus dipilih ketika Ctrltombol ditekan.
sumber
Saya sebenarnya membangun ekstensi Chrome yang melakukan ini, dan untuk semua halaman web. Kode sumber ada di GitHub .
Saya menemukan tiga bug dengan pendekatan Trello, yang saya tahu karena saya sudah menghadapinya sendiri :)
Salinan tidak berfungsi dalam skenario ini:
Saya memecahkan # 1 dengan selalu memiliki rentang tersembunyi, daripada membuatnya ketika pengguna memukul Ctrl/ Cmd.
Saya memecahkan # 2 dengan menghapus sementara pilihan zero-length, menyimpan posisi caret, melakukan copy dan mengembalikan posisi caret.
Saya belum menemukan perbaikan untuk # 3 :) (Untuk informasi, periksa masalah terbuka di proyek GitHub saya).
sumber
Dengan bantuan kode ( tautan ke GitHub ) jas hujan , saya berhasil mendapatkan versi yang sedang berjalan mengakses clipboard dengan JavaScript biasa.
Satu-satunya masalah adalah, bahwa versi ini hanya berfungsi dengan Chrome. Platform Trello mendukung semua browser. Apa yang saya lewatkan?Terimakasih berkat VadimIvanov.
Lihat contoh yang berfungsi: http://jsfiddle.net/AGEf7/
sumber
el.innerText
tidak terdefinisi, jadi saya mengubah baris terakhirclipboard()
fungsi menjadiclip.setValue(el.innerText || el.textContent);
untuk kompatibilitas lintas-browser yang lebih banyak. link: jsfiddle.net/AGEf7/31Kode Daniel LeCheminant tidak berfungsi untuk saya setelah mengubahnya dari CoffeeScript ke JavaScript ( js2coffee ). Itu terus membom di
_.defer()
telepon.Saya berasumsi ini ada hubungannya dengan jQuery yang ditangguhkan, jadi saya mengubahnya
$.Deferred()
dan berfungsi sekarang. Saya mengujinya di Internet Explorer 11, Firefox 35, dan Chrome 39 dengan jQuery 2.1.1. Penggunaannya sama seperti yang dijelaskan dalam posting Daniel.sumber
Sesuatu yang sangat mirip dapat dilihat di http://goo.gl ketika Anda mempersingkat URL.
Ada elemen input yang hanya bisa dibaca yang berfokus pada program, dengan tooltip tekan CTRL-Cuntuk menyalin.
Ketika Anda menekan pintasan itu, konten input secara efektif masuk ke clipboard. Benar-benar bagus :)
sumber