07/08/2023

Explorando a Clipboard API - Facilitando o Copiar e Colar

O que é a clipboard API

A clipboard API é utilizada para controlar o copia e cola dos usuários. Podemos utilizá-la para adicionar textos ou imagens ao seu evento de "copy" e para fazer o usuário colar o que está armazenado no seu CNTRL + C.

Permissões

Para escrever no CNTRL + C do cliente não é necessário o cliente dar a permissão para realizarmos essa tarefa. Porém, para qualquer outra tarefa é necessário o usuário dar a permissão para tal. Lembrando que cada navegador define as suas regras de permissão, ou seja, pode haver casos em que é pedido a permissão de escrita para o usuário.

Como utilizar:

Para leitura do CNTRL + C

navigator.clipboard
.readText()
.then(
(clipText) => (document.querySelector(".editor").innerText += clipText),
);

Link de exemplo para a clipboard API:

https://async-clipboard-api.glitch.me/

Exemplo de interceptação do evento de cópia:

const source = document.querySelector("div.source");

source.addEventListener("copy", (event) => {
const selection = document.getSelection();
event.clipboardData.setData("text/plain", selection.toString().toUpperCase());
event.preventDefault();
});

Interceptação do evento de corte:

const source = document.querySelector("div.source");

source.addEventListener("cut", (event) => {
const selection = document.getSelection();
event.clipboardData.setData("text/plain", selection.toString().toUpperCase());
selection.deleteFromDocument();
event.preventDefault();
});


Interceptação do evento de cola:

const target = document.querySelector("div.target");

target.addEventListener("paste", (event) => {
event.preventDefault();

let paste = (event.clipboardData || window.clipboardData).getData("text");
paste = paste.toUpperCase();
const selection = window.getSelection();
if (!selection.rangeCount) return;
selection.deleteFromDocument();
selection.getRangeAt(0).insertNode(document.createTextNode(paste));
selection.collapseToEnd();
});

Bem pessoal esse é o básico para se utilizar essa API, qualquer dúvida por favor me chamem e caso queiram aprofundar mais olhem os links de referência. Me sigam no Instagram @luccaparadeda .

Referencias:

https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API

https://developer.mozilla.org/en-US/docs/Web/API/Element/paste_event