Copy to clipboard JavaScript with Code Examples
Copying text and data from a web page is a common action for users, but it can sometimes be challenging to implement in web application development. The need for a seamless copying experience without resorting to manual highlighting and copying has made Copy to Clipboard functionality increasingly popular for JavaScript developers. In this article, we will explore the best ways to implement Copy to Clipboard functionality in JavaScript with various code examples.
Clipboard APIs
Clipboard APIs were introduced to the web platform by W3C in 2019, providing native support for copying and pasting data to and from web pages. The Clipboard API offers two main methods for coping functionality:
- Async Clipboard API
- document.execCommand()
The Async Clipboard API
The Async Clipboard API provides a more robust and modern way of copying text or other data from JavaScript. This method uses the Clipboard API to work with modern browsers that support it. The Clipboard API provides a way for web apps to access and manipulate the clipboard contents securely.
The Async Clipboard API provides two ways to handle the clipboard – read and write. The read operation is used to retrieve data from the clipboard while the write action is used to add data to the clipboard.
Here is an example of using the Clipboard API to write text to the clipboard:
// Get the text from an element
const targetElement = document.getElementById("clipboard");
const text = targetElement.innerText.trim();
// Write the text to the clipboard
navigator.clipboard.writeText(text).then(() => {
console.log('Text copied to clipboard successfully!')
}).catch((error) => {
console.log(error);
});
The code above extracts some text from the clipboard and writes it to the clipboard asynchronously using the navigator.clipboard.write method.
Now let’s look at an example of how to read text from the clipboard using the Clipboard API:
navigator.clipboard.readText().then((text) => {
console.log('Text read from clipboard: ', text);
}).catch((error) => {
console.log(error);
});
The code above reads text from the clipboard using the navigator.clipboard.read method.
The document.execCommand() method
The document.execCommand is a JavaScript function that can be used to copy content to the clipboard without using the Clipboard API. It is a legacy method that was first introduced with Internet Explorer 4.0.
Here’s an example of how to use document.execCommand to copy text to the clipboard:
// Get the text from an element
const targetElement = document.getElementById("clipboard");
const text = targetElement.innerText.trim();
// Create a temporary text area to enable copying
const tempElement = document.createElement("textarea");
tempElement.value = text;
// Add the temporary element to the DOM
document.body.appendChild(tempElement);
// Select the entire text area and copy to the clipboard
tempElement.select();
document.execCommand("copy");
// Remove the temporary text area
document.body.removeChild(tempElement);
This code creates a temporary HTML element with an empty TextArea, appends it to the body, and then copies the text into it. The function then uses document.execCommand to copy the selection to the clipboard.
Code Examples Explained
Let's go through each part of the code examples step-by-step to understand how it works.
Async Clipboard API
In this example, we get the text containing the element with the id clipboard
. The innerText
property is used to get the text contents of the target element:
const targetElement = document.getElementById("clipboard");
const text = targetElement.innerText.trim();
Next, we use the Clipboard API’s writeText
method to write the text to the clipboard:
navigator.clipboard.writeText(text).then(() => {
console.log('Text copied to clipboard successfully!')
}).catch((error) => {
console.log(error);
});
We then use the promise returned by the writeText
method to log a success or an error message depending on the copying outcome.
Reading text from the clipboard is also quite easy with the Clipboard API:
navigator.clipboard.readText().then((text) => {
console.log('Text read from clipboard: ', text);
}).catch((error) => {
console.log(error);
});
document.execCommand()
The document.execCommand()
method can copy the text without the Clipboard API being used. Here’s how it works in our example:
const targetElement = document.getElementById("clipboard");
const text = targetElement.innerText.trim();
First, we get the text content by using a similar method to the example above.
Next, we create a temporary TextArea element and set its value to the text we want to copy:
const tempElement = document.createElement("textarea");
tempElement.value = text;
Then, we append the temporary element to the DOM:
document.body.append(tempElement);
Next, we select the text from the temporary element and use the document.execCommand
method with command "copy" to copy the selection to the clipboard:
tempElement.select();
document.execCommand("copy");
Finally, we remove the temporary text area from the DOM:
document.body.removeChild(tempElement);
Conclusion
In this article, we have explored how to implement Copy to Clipboard functionality in JavaScript using two different methods: The Async Clipboard API and the legacy document.execCommand() method. Both methods provide a workable solution and can be used interchangeably. However, the Async Clipboard API is the modern and more secure method that offers a more intuitive user experience without compromising web app security. Try out these examples in your next project to provide a seamless Copy to Clipboard experience for your users.
Sure! Here are some additional details about the two approaches discussed in the previous article:
Async Clipboard API:
The Async Clipboard API is a modern and secure way to copy data to or from the clipboard. It provides secure access to clipboard contents and does not require workarounds like creating a temporary element to select and copy.
In the example code, the async Clipboard API uses the writeText
method to copy text to the clipboard. This method returns a promise that resolves when the text is successfully copied and rejects if the copy operation fails. The readText
method reads data from the clipboard.
Benefits of using the Async Clipboard API:
- It provides a secure way to access and manipulate the clipboard contents.
- It enables copying of data other than text including images, URLs, and files.
- It provides a more intuitive user experience.
- It reduces the likelihood of data loss compared to older methods.
Document.execCommand():
The document.execCommand() method is a legacy method that can be used to copy data to the clipboard. It has been around for a long time and is supported by most browsers.
In the example code, the document.execCommand("copy")
method is used to copy the selected text to the clipboard. This method invokes a built-in copy command in the browser and copies the current selected text to the clipboard.
Benefits of using document.execCommand():
- It is supported by most browsers, including older ones.
- It can be used for copying simple text data.
- It is easy to implement.
- It supports copy and paste for all file types.
Limitations of using document.execCommand():
- It is a legacy method and may not be supported by all modern browsers.
- It can only copy simple text data, not images, URLs, or other file types.
- There are security concerns associated with using this method.
Overall, both the Async Clipboard API and document.execCommand() provide ways to perform the copy to clipboard functionality. The Async Clipboard API is the modern and more secure method whereas document.execCommand() is the legacy method that is still supported by most browsers. Choosing the right approach depends on the specific requirements of the project at hand.
Popular questions
- What is the benefit of using the Async Clipboard API?
- The benefit of using the Async Clipboard API is that it provides a secure way to access and manipulate the clipboard contents, enables copying of data other than text including images, URLs, and files, and provides a more intuitive user experience.
- What is document.execCommand() method used for?
- The
document.execCommand()
method is a legacy method used to copy data to the clipboard. It can be used to copy simple text data.
- How does the Clipboard API work?
- The Clipboard API provides a secure way for web applications to access and manipulate clipboard contents. It provides a "read" method to retrieve data from the clipboard and a "write" method to add data to the clipboard.
- What is the drawback of using document.execCommand()?
- The drawbacks of using
document.execCommand()
include its lack of support in some modern browsers, its inability to copy data other than simple text, and security concerns.
- How can you copy text from an element using the Clipboard API?
- To copy text from an element using the Clipboard API, you can first get the text from the element using the
innerText
property. Then, use thewriteText
method of the Clipboard API to copy the text to the clipboard. For example:
const targetElement = document.getElementById("myElement");
const text = targetElement.innerText.trim();
navigator.clipboard.writeText(text)
.then(() => {
console.log("Text copied to clipboard successfully");
})
.catch(() => {
console.log("Error: Text could not be copied to clipboard");
});
Tag
ClipboardJS