Beberapa situs web sekarang menggunakan layanan JavaScript dari Tynt yang menambahkan teks ke konten yang disalin.
Jika Anda menyalin teks dari situs menggunakan ini dan kemudian menempelkannya, Anda mendapatkan tautan ke konten asli di bagian bawah teks.
Tynt juga melacak ini saat terjadi. Ini trik rapi yang dilakukan dengan baik.
Skrip mereka untuk melakukan ini sangat mengesankan - daripada mencoba memanipulasi clipboard (yang hanya versi IE yang lebih lama memungkinkan mereka melakukannya secara default dan yang harus selalu dimatikan) mereka memanipulasi pilihan yang sebenarnya.
Jadi, ketika Anda memilih blok teks, konten tambahan ditambahkan sebagai tersembunyi yang <div>
disertakan dalam pilihan Anda. Saat Anda menempelkan gaya ekstra diabaikan dan tautan tambahan muncul.
Ini sebenarnya cukup mudah dilakukan dengan blok teks sederhana, tetapi mimpi buruk ketika Anda mempertimbangkan semua pilihan yang mungkin di HTML kompleks di browser yang berbeda.
Saya sedang mengembangkan aplikasi web - Saya tidak ingin siapa pun dapat melacak konten yang disalin dan saya ingin info tambahan berisi sesuatu yang kontekstual, bukan hanya tautan. Layanan Tynt tidak benar-benar sesuai dalam kasus ini.
Adakah yang tahu tentang pustaka JavaScript open source (mungkin jQuery plug in atau serupa) yang menyediakan fungsionalitas serupa tetapi tidak mengekspos data aplikasi internal?
sumber
Jawaban:
Pembaruan 2020
Solusi yang berfungsi di semua browser terbaru .
[Pos lama - sebelum pembaruan tahun 2020]
Ada dua cara utama untuk menambahkan info tambahan ke teks web yang disalin.
1. Memanipulasi seleksi
Idenya adalah untuk memperhatikan
copy event
, kemudian menambahkan wadah tersembunyi dengan info ekstra kami kedom
, dan memperluas pilihan ke sana.Metode ini diadaptasi dari artikel ini oleh c.bavota . Periksa juga versi jitbit untuk kasus yang lebih kompleks.
2. Memanipulasi clipboard
Idenya adalah untuk menonton
copy event
dan langsung memodifikasi data clipboard. Ini dimungkinkan dengan menggunakanclipboardData
properti. Perhatikan bahwa properti ini tersedia di semua browser utama diread-only
; yangsetData
metode ini hanya tersedia pada IE.sumber
window.clipboardData
keevent.clipboardData
. IE (v11 juga) tidak mendukungevent.clipboardData
jsfiddle.net/m56af0je/8Ini adalah solusi javascript vanilla dari solusi yang dimodifikasi di atas tetapi mendukung lebih banyak browser (metode lintas browser)
sumber
Versi terpendek untuk jQuery yang saya uji dan berfungsi adalah:
sumber
Berikut adalah plugin di jquery untuk melakukannya https://github.com/niklasvh/jquery.plugin.clipboard Dari proyek readme "Skrip ini memodifikasi konten pilihan sebelum event copy dipanggil, menghasilkan pilihan yang disalin berbeda dari yang dipilih pengguna.
Ini memungkinkan Anda untuk menambahkan / menambahkan konten ke pilihan, seperti informasi hak cipta atau konten lainnya.
Dirilis di bawah Lisensi MIT "
sumber
Memperbaiki jawaban, mengembalikan pilihan setelah perubahan untuk mencegah pilihan acak setelah salinan.
sumber
var range = selection.getRangeAt(0);
Perbaikan untuk 2018
sumber
var selection = window.getSelection();
ini dengan yang ini:var selection = getSelectionHtml();
Juga solusi yang sedikit lebih pendek:
sumber
Ini adalah kompilasi dari 2 jawaban di atas + kompatibilitas dengan Microsoft Edge.
Saya juga telah menambahkan pemulihan dari pilihan asli di bagian akhir, seperti yang diharapkan secara default di browser apa pun.
sumber