Mientras espera con impaciencia la compatibilidad de Xbrowser con la API del portapapeles ...
Esto funcionará a la perfección en
Chrome, Firefox, Edge, IE
IE solo solicitará al usuario una vez que acceda al Portapapeles.
Safari (5.1 en el momento de escribir este artículo) no es compatible execCommand
concopy/cut
/**
* CLIPBOARD
* https://stackoverflow.com/a/33337109/383904
*/
const clip = e => {
e.preventDefault();
const cont = e.target.innerHTML;
const area = document.createElement("textarea");
area.value = e.target.innerHTML; // or use .textContent
document.body.appendChild(area);
area.select();
if(document.execCommand('copy')) console.log("Copied to clipboard");
else prompt("Copy to clipboard:\nSelect, Cmd+C, Enter", cont); // Saf, Other
area.remove();
};
[...document.querySelectorAll(".clip")].forEach(el =>
el.addEventListener("click", clip)
);
<a class="clip" href="#!">Click an item to copy</a><br>
<a class="clip" href="#!"><i>Lorem</i></a><br>
<a class="clip" href="#!"><b>IPSUM</b></a><br>
<textarea placeholder="Paste here to test"></textarea>
Todos los navegadores (excepto Firefox, que solo puede manejar el tipo mime "plain/text"
hasta donde he probado) no han implementado la API del Portapapeles . Es decir, tratando de leer el evento del portapapeles en Chrome usando
var clipboardEvent = new ClipboardEvent("copy", {
dataType: "plain/text",
data: "Text to be sent to clipboard"
});
throws: Uncaught TypeError: constructor ilegal
El mejor recurso del increíble lío que está sucediendo entre los navegadores y el Portapapeles se puede ver aquí (caniuse.com) (→ Siga los comentarios en "Notas" ).
MDN dice que el soporte básico es "(SÍ)" para todos los navegadores, lo cual es inexacto porque uno esperaría que al menos la API funcione, en absoluto.