Dipublikasikan: 23 September 2025
Peristiwa clipboardchange adalah fitur baru yang ditambahkan ke Chrome oleh tim Microsoft Edge. API ini memungkinkan Anda memantau perubahan papan klip secara efisien tanpa overhead performa polling.
Sekarang Anda dapat menguji peristiwa clipboardchange dengan uji coba origin di
Chrome
dan
Edge,
mulai dari versi 140.
Kami menerima masukan apa pun yang mungkin Anda miliki saat menguji fitur baru ini karena kami pada akhirnya berharap dapat menstandarkannya.
Tantangan melakukan polling pada papan klip untuk mendeteksi perubahan
Untuk mengetahui konten apa yang tersedia di papan klip sistem, Anda harus menggunakan metode polling yang tidak efisien. Misalnya, aplikasi web pengeditan teks mungkin ingin mengaktifkan tombol "Tempel" yang berbeda berdasarkan apakah papan klip berisi teks, gambar, atau konten HTML.
Pendekatan saat ini untuk mencapai hal ini mengharuskan Anda memanggil metode
navigator.clipboard.read() berulang kali untuk memeriksa konten papan klip, seperti yang ditunjukkan oleh
cuplikan kode berikut:
// Inefficient polling approach
setInterval(async () => {
try {
const clipboardItems = await navigator.clipboard.read();
updatePasteButtons(clipboardItems);
} catch (err) {
console.error('Failed to read clipboard:', err);
}
}, 1000); // Poll every second
Meskipun cara ini berhasil, ada juga kekurangan yang signifikan.
Dampak performa
Terus-menerus melakukan polling pada papan klip akan menciptakan overhead yang tidak perlu. Setiap panggilan ke
navigator.clipboard.read() memerlukan akses papan klip tingkat sistem, yang dapat
berdampak negatif pada performa aplikasi Anda, terutama pada
perangkat dengan keterbatasan resource. Frekuensi polling menjadi kompromi antara
responsivitas dan performa.
Baterai cepat habis
Pada perangkat seluler, polling papan klip yang sering dapat menyebabkan pengurasan daya baterai karena aplikasi terus mengakses resource sistem meskipun pengguna tidak secara aktif menyalin atau menempelkan konten.
Ketidakkonsistenan pengalaman pengguna
Interval polling menyebabkan penundaan antara waktu konten disalin dan saat UI diperbarui untuk mencerminkan status papan klip baru. Pengguna mungkin melihat status tombol tempel yang sudah tidak berlaku atau mengalami periode singkat saat opsi yang benar tidak tersedia.
Masalah privasi terkait polling berlebihan
Seringnya akses ke papan klip dapat menimbulkan masalah privasi, karena aplikasi terus membaca data papan klip meskipun data tersebut tidak berubah. Hal ini dapat terasa mengganggu bagi pengguna yang memperhatikan privasi konten papan klip mereka.
Acara clipboardchange
Untuk mengatasi tantangan ini, kami telah menerapkan peristiwa baru yang disebut
clipboardchange, dan meluncurkan uji coba origin di Edge dan Chrome, sehingga
Anda dapat mengujinya di aplikasi Anda.
Peristiwa ini memungkinkan aplikasi web merespons perubahan papan klip secara reaktif, bukan melakukan polling secara proaktif untuk perubahan tersebut. Peristiwa ini akan otomatis dipicu saat konten disalin atau dipotong ke papan klip dari aplikasi apa pun, papan klip dihapus, atau konten ditempel (yang dapat menghapus papan klip dalam beberapa kasus). Peristiwa hanya dipicu saat dokumen memiliki fokus.
Anda dapat memproses peristiwa clipboardchange dengan menambahkan pemroses pada
antarmuka navigator.clipboard seperti yang ditunjukkan di sini:
navigator.clipboard.addEventListener('clipboardchange', event => {
console.log('Clipboard content changed!');
console.log('Available MIME types:', event.types);
// Update UI based on available formats
updatePasteButtons(event.types);
});
Keunggulan utama
Peristiwa clipboardchange memberikan beberapa manfaat dibandingkan polling:
- Efisien: Peristiwa hanya diaktifkan saat perubahan benar-benar terjadi.
- Menjaga privasi: Acara hanya mengekspos jenis MIME native, bukan konten sebenarnya.
- Tidak ada dialog izin: Karena tidak ada data sensitif yang diekspos, tidak ada izin pengguna yang diperlukan.
- Respons real-time: UI akan langsung diperbarui saat konten di papan klip berubah.
- Sadari fokus: Peristiwa hanya dipicu saat dokumen memiliki fokus.
Properti types
Objek peristiwa clipboardchange menyertakan properti types, yang berisi
array jenis MIME yang tersedia di papan klip:
navigator.clipboard.addEventListener('clipboardchange', event => {
// Example types array: ['text/plain', 'text/html', 'image/png']
const hasText = event.types.includes('text/plain');
const hasImage = event.types.includes('image/png');
const hasHtml = event.types.includes('text/html');
// Enable/disable paste buttons accordingly
document.getElementById('paste-text').disabled = !hasText;
document.getElementById('paste-image').disabled = !hasImage;
document.getElementById('paste-html').disabled = !hasHtml;
});
Perilaku fokus
Jika perubahan papan klip terjadi saat dokumen tidak dalam fokus, satu
peristiwa clipboardchange akan diaktifkan saat dokumen mendapatkan kembali fokus sistem.
Informasi perubahan papan klip historis tidak akan tersedia, hanya jenis yang tersedia saat halaman mendapatkan fokus yang akan disertakan dalam anggota types.
Uji acara clipboardchange hari ini
Anda dapat menguji peristiwa clipboardchange yang baru hari ini:
- Secara lokal, dengan mengaktifkan fitur di browser Anda saja.
- Atau di aplikasi web produksi Anda, dengan mendaftar ke uji coba origin.
Mendeteksi peristiwa clipboardchange untuk kompatibilitas yang lebih baik
Pertama, karena ini adalah fitur baru, Anda harus mendeteksi dukungan fitur ini sebelum
menggunakannya. Anda dapat melakukannya dengan menguji keberadaan properti onclipboardchange di navigator.clipboard, seperti yang ditunjukkan di sini:
if ('onclipboardchange' in navigator.clipboard) {
// The clipboardchange event is supported
navigator.clipboard.addEventListener('clipboardchange', handleClipboardChange);
} else {
// Fallback to polling or other methods
console.log('clipboardchange event not supported, using fallback');
setInterval(checkClipboard, 2000);
}
Menguji secara lokal
Untuk menguji peristiwa clipboardchange di browser Anda saja:
- Buka halaman
about://flags. - Telusuri
ClipboardChangeEventdi kotak Search flags. - Gunakan menu drop-down dan ubah nilai dari Default menjadi Diaktifkan.
- Mulai ulang browser.
Mendaftar untuk uji coba origin
Untuk mencoba peristiwa clipboardchange di situs Anda dengan pengguna sebenarnya, daftar ke uji coba origin di
Chrome
atau
Edge.
Uji coba origin akan berjalan di Chrome dan Edge antara versi 140 dan 142
(antara 2 September 2025 dan 2 Desember 2025).
Baca Mulai menggunakan uji coba asal untuk mempelajari lebih lanjut uji coba asal dan cara memulainya
Demo
Untuk melihat cara kerja acara ini, pelajari demo kami dan lihat kode sumber di GitHub.
Demo ini menunjukkan cara menggunakan peristiwa clipboardchange untuk membuat antarmuka tempel yang responsif dan otomatis diperbarui berdasarkan konten papan klip Anda.
Coba salin berbagai jenis konten (teks, gambar, HTML) dan lihat cara tombol tempel diaktifkan dan dinonaktifkan secara real-time tanpa polling.
Masukan
Kami ingin mendengar dari Anda tentang cara kerja acara clipboardchange untuk kasus penggunaan Anda. Berikan masukan dengan membuat masalah di repositori
W3C/clipboard-apis.
Sinyal publik tentang minat Anda akan membantu kami dan browser lain memahami pentingnya fitur ini bagi Anda, yang dapat memengaruhi proses standarisasi.
Meskipun peristiwa ini dapat digunakan sebagai peningkatan progresif, kami ingin menstandarkannya sebagai bagian dari spesifikasi Clipboard API, dan pada akhirnya melihatnya diadopsi oleh semua browser. Untuk saat ini, Anda dapat kembali ke polling atau teknik pemantauan papan klip lainnya.