📋�Clipboard APIs on the Web
Lucas Garron
July 10, 2018
Agenda
clipboard-polyfill
github.com/lgarron/clipboard-polyfill
Asynchronous Clipboard API
Asynchronous Clipboard API
<button onclick="copy()">Copy text!</button>�<script>�function copy() {�� navigator.clipboard.writeText("Hello world!");��};�</script>
Asynchronous Clipboard API
<button onclick="copy()">Copy text!</button>�<script>�function copy() {� navigator.clipboard.writeText("Hello world!").then(� console.log,� console.error);�};�</script>
Asynchronous Clipboard API
�var dt = new DataTransfer();�dt.setData("text/plain", "plain text")�dt.setData("text/html", "<b>markup</b> text")�navigator.clipboard.write(dt);
Asynchronous Clipboard API
�navigator.clipboard.readText().then(� console.log,� console.error�);
navigator.clipboard
Promise<void>� writeText(DOMString)��Promise<void>� write(DataTransfer)
Promise<DOMString>� readText()��Promise<DataTransfer>� read()
Availability
Older APIs
Other APIs
Most compatible until 2015
Most compatible in 2018
Flash
Flash
Flash
Internet Explorer 9-11
��window.clipboardData.setData("Text", text);�window.clipboardData.setData("URL", url);
Internet Explorer 9-11
Internet Explorer 9-11
��window.clipboardData.getData("Text");�window.clipboardData.getData("URL");
document.execCommand("copy")
Triggers a copy event�for the current selection�“as if the user initiated it”.
document.execCommand("copy")
document.execCommand("copy")
📋
document.execCommand("copy")
document.execCommand("copy")
<!-- Target -->�<textarea id="bar">Mussum ipsum cacilds...</textarea>��<!-- Trigger -->�<button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar">� Cut to clipboard�</button>
document.execCommand("copy")
function copy(str) {
function listener(e) {
e.clipboardData.setData("text/plain", str);
e.preventDefault();
}
document.addEventListener("copy", listener);
document.execCommand("copy");
document.removeEventListener("copy", listener);
}
Issues with document.execCommand("copy")
Issues with document.execCommand(...)
Issues with document.execCommand(...)
Chrome Extension API / Web Extensions
Chrome
Chrome Extension API / Web Extensions
Firefox
Chrome Extension API / Web Extensions
Future
Future
Async Clipboard API in all browsers?
Future
More MIME types?
Future
Read clipboard?
Listen to clipboard changes?
Future
Contribute to the discussion:��https://github.com/w3c/clipboard-apis
Future
I’ll be keep clipboard-polyfill compatible with what is available.