Podczas gdy z niecierpliwością czeka na Xbrowser wsparciu API Schowek ...
Będzie to pięknie działać w
Chrome, Firefox, Edge, IE
IE tylko raz poprosi użytkownika o dostęp do Schowka.
Safari (5.1 w momencie pisania) nie obsługuje execCommand
dlacopy/cut
const clip = e => {
e.preventDefault();
const cont = e.target.innerHTML;
const area = document.createElement("textarea");
area.value = e.target.innerHTML;
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);
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>
Wszystkie (z wyjątkiem przeglądarek Firefox, który jest w stanie obsłużyć tylko typ MIME "plain/text"
miarę Przetestowałem) zostały nie zrealizowane z API schowka . To znaczy, próbując odczytać zdarzenie schowka w Chrome przy użyciu
var clipboardEvent = new ClipboardEvent("copy", {
dataType: "plain/text",
data: "Text to be sent to clipboard"
});
throws: Uncaught TypeError: Illegal constructor
Najlepsze źródło niewiarygodnego bałaganu, który dzieje się między przeglądarkami i schowkiem, można zobaczyć tutaj (caniuse.com) (→ Śledź komentarze w sekcji „Uwagi” ).
MDN mówi, że podstawową obsługą jest „(TAK)” dla wszystkich przeglądarek, co jest niedokładne, ponieważ można by oczekiwać, że przynajmniej API będzie w ogóle działać.