Ejemplo de portapapeles

Este ejemplo muestra cómo copiar texto al portapapeles. Está tomado del ejemplo Copy / Paste data de la aplicación de ejemplo de Ninext.
function copyToClipboard(text : text) do
#{:text navigator.clipboard.writeText(text);}#
end;
Restricciones de uso de navigator.clipboard.writeText()
La API navigator.clipboard.writeText(text) está sujeta a restricciones de seguridad impuestas por los navegadores. Debe activarse directamente por una interacción del usuario (por ejemplo, un clic en un botón).
Si entre la interacción del usuario y la llamada a writeText() se intercala un retardo o un tratamiento intermedio (como un cálculo), el navegador deja de considerar que la operación la ha iniciado el usuario y bloquea el acceso al portapapeles para evitar abusos.
Buenas prácticas:
- Llame a
navigator.clipboard.writeText(text)directamente dentro de un gestor de eventos de usuario (por ejemplo,onclick). - Evite introducir operaciones asíncronas o retardos entre la acción del usuario y la llamada a la función.
Ejemplo correcto:
document.getElementById("copyButton").addEventListener("click", () => {
navigator.clipboard.writeText("Copied text!")
.then(() => console.log("Text copied successfully!"))
.catch(err => console.error("Error copying text:", err));
});
Ejemplo incorrecto (puede no funcionar):
document.getElementById("copyButton").addEventListener("click", () => {
setTimeout(() => { // Introducing a delay may prevent copying
navigator.clipboard.writeText("Copied text!");
}, 100);
});
