С нетерпением ожидая поддержки Xbrowser API буфера обмена ...
Это будет прекрасно работать в
Chrome, Firefox, Edge, IE.
IE только один раз предложит пользователю получить доступ к буферу обмена.
Safari (5,1 на момент написания статьи) не поддерживает execCommand
дляcopy/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>
Все браузеры (кроме Firefox , который способен обрабатывать только мимику типа "plain/text"
, насколько я проверил) еще не реализованы в Clipboard API . То есть, пытаясь прочитать событие буфера обмена в Chrome, используя
var clipboardEvent = new ClipboardEvent("copy", {
dataType: "plain/text",
data: "Text to be sent to clipboard"
});
throws: Uncaught TypeError: Незаконный конструктор
Лучший ресурс о невероятном беспорядке, который происходит между браузерами и буфером обмена, можно увидеть здесь (caniuse.com) (→ Следите за комментариями в разделе «Примечания» ).
MDN говорит, что базовая поддержка - «(ДА)» для всех браузеров, что неточно, потому что можно было бы ожидать, что хотя бы API вообще будет работать.