Reduce, Copy and Paste in JavaScript
The browser permits JavaScript scripts to learn and write to the clipboard, and routinely copy or paste content material. On the whole, scripts shouldn’t modify the person’s clipboard, in order to not meet the person’s expectations. Nonetheless, typically it may be handy to do that, such because the “one-click copy” operate, the person clicks a button, and the desired content material is routinely entered into the clipboard. At the moment, there are 3 ways to implement clipboard operations.
Doc.execCommand()
technique- Asynchronous Clipboard API
copy
,lower
andpaste
Occasions
This text introduces these three strategies one after the other. That is my thirty seventh Medium article.
Doc.execCommand()
is the normal technique of manipulating the clipboard, which is supported by varied browsers. It helps the three operations of copy, lower, and paste.
Doc.execCommand('copy')
— copyDoc.execCommand('lower')
— lowerDoc.execCommand('paste')
— paste
Copy or Reduce operation
When copying, first choose the textual content after which name the Doc.execCommand('copy')
, the chosen textual content will enter the clipboard.
Within the above instance, the script first selects the textual content within the inputElement
of the enter field ( inputElement.choose()
), after which Doc.execCommand('copy')
copies it to the clipboard. Be aware that the copy operation is finest positioned within the occasion listener operate, triggered by the person (for instance, the person clicks a button). If the script is executed autonomously, some browsers might report an error. Reduce operation can be much like the copy operation.
Paste operation
When pasting, calling Doc.execCommand('paste')
will output the contents of the clipboard to the present focus component.
Drawback
Though the Doc.execCommand()
technique is handy, it has some disadvantages. First, it will probably solely copy the chosen content material to the clipboard, and can’t write content material to the clipboard arbitrarily. Secondly, it’s an asynchronous operation. Should you copy/paste a considerable amount of information, the web page will freeze. Some browsers will even pop up a immediate field and ask the person for permission. Right now, the web page will turn out to be unresponsive earlier than the person makes a selection. In an effort to clear up these issues, browser distributors have proposed an asynchronous Clipboard API.
Clipboard API is the next-generation clipboard operation technique, which is extra highly effective and cheap than the normal Doc.execCommand()
technique. All its operations are asynchronous and return Promise objects with out inflicting web page jams. Furthermore, it will probably put arbitrary content material (similar to footage) into the clipboard. The navigator.clipboard
property returns the Clipboard object, and all operations are carried out by way of this object.
const clipboardObj = navigator.clipboard;
If the navigator.clipboard
property returns undefined
, it signifies that the present browser doesn’t help this API (you may see the total compatibly desk on Can I exploit…). Since customers might put delicate information (similar to passwords) on the clipboard, permitting scripts to learn them arbitrarily will trigger safety dangers, so this API has extra safety restrictions. To begin with, the Chrome browser stipulates that solely HTTPS protocol pages can use this API. Nonetheless, the event atmosphere (localhost
) permits using non-encrypted protocols. Secondly, the person’s permission must be clearly obtained when calling. The precise implementation of permissions makes use of the Permissions API. There are two permissions associated to the clipboard: clipboard-write
(write permission) and clipboard-read
(learn permission). The “write permission” is routinely granted to the script, and the “learn permission” have to be explicitly granted by the person. In different phrases, the script could be routinely accomplished when writing to the clipboard, however when studying the clipboard, the browser will pop up a dialog field asking whether or not the person agrees to learn.
As well as, it needs to be famous that what the script reads is all the time the clipboard of the present web page. One drawback that this brings is that in the event you paste the related code into the developer software and run it immediately, an error could also be reported as a result of the present web page presently is the window of the developer software, not an online web page.
Should you paste the above code into the developer software and run it, an error shall be reported. As a result of when the code is working, the developer software window is the present web page, and there’s no DOM interface that the Clipboard API relies on this web page. One answer is to place the related code in setTimeout() to delay working, and rapidly click on on the web page window of the browser earlier than calling the operate to show it into the present web page.
After the above code is pasted into the developer software to run, rapidly click on on the web page window of the webpage to make it the present web page, in order that no error shall be reported.
Clipboard object
clipboard.readText()
The clipboard.readText()
technique is used to repeat the textual content information within the clipboard.
Within the above instance, after the person clicks on the web page, the textual content within the clipboard shall be output. Be aware that the browser will pop up a dialog field presently, asking the person whether or not to agree with the script to learn the clipboard.
If the person disagrees, the script will report an error. Right now, you need to use the attempt...catch
construction to deal with errors.
clipboard.learn()
The clipboard.learn()
technique is used to repeat the information within the clipboard, which could be textual content information or binary information (similar to footage). This technique requires express permission from the person. This technique returns a Promise object. As soon as the state of the thing turns into resolved, an array could be obtained, and every array member is an occasion of a ClipboardItem object.
The ClipboardItem object represents a single clip merchandise and every clip merchandise has a clipboardItem.sorts
property and a clipboardItem.getType()
technique. The clipboardItem.sorts
property returns an array whose members are the MIME sorts accessible for the clip merchandise. For instance, a clip merchandise could be pasted in HTML format or in plain textual content format. Then it has two MIME sorts (textual content/html
and textual content/plain
). The clipboardItem.getType(sort)
technique is used to learn the information of the clip merchandise and returns a Promise object. This technique accepts the MIME sort of the clip merchandise as a parameter and returns the information of that sort. This parameter is required, in any other case, an error shall be reported.
clipboard.writeText()
The clipboard.writeText()
technique is used to write down textual content content material to the clipboard.
The above instance is that after the person clicks on the internet web page, the script writes textual content information to the clipboard. This technique doesn’t require person permission, however it’s best to place it in attempt...catch
to stop errors.
clipboard.write()
The clipboard.write()
technique is used to write down arbitrary information to the clipboard, which could be textual content information or binary information. This technique accepts a ClipboardItem occasion as a parameter, which represents the information written to the clipboard.
Within the above instance, the script writes an image to the clipboard. Be aware that the Chrome browser at present (till this author writes this text) solely helps writing photos in PNG format. clipboardItem()
is a constructor natively offered by the browser to generate an occasion of clipboardItem
. It accepts an object as a parameter. The important thing identify of the thing is the MIME sort of the information, and the important thing worth is the information itself. The next instance is to write down the worth of the identical clip merchandise in a number of codecs to the clipboard, one is textual content information, and the opposite is binary information for pasting on totally different events.
When the person places information into the clipboard, the copy
occasion shall be triggered. The next instance is to transform the textual content that the person places on the clipboard to uppercase.
Within the above instance, the clipboardData
property of the occasion object comprises the clipboard information. It’s an object with the next properties and strategies.
Occasion.clipboardData.setData(sort, information)
: To change the clipboard information, it is advisable specify the information sort.Occasion.clipboardData.getData(sort)
: To acquire clipboard information, it is advisable specify the information sort.Occasion.clipboardData.clearData([type])
: Clear clipboard information, you may specify the information sort. If you don’t specify the sort, all kinds of information shall be cleared.Occasion.clipboardData.gadgets
: An array-like object comprises all clip gadgets, however often there is just one clip merchandise
The next instance is to intercept the person’s copy operation and put the desired content material into the clipboard.
Within the above instance, first, use e.preventDefault()
to cancel the default operation of the clipboard, after which the script takes over the copy operation. The lower
occasion is triggered when the person performs a reducing operation. Its processing is precisely the identical because the copy
occasion, and the lower information can be obtained from the Occasion.clipboardData
property.
When the person makes use of the clipboard information to stick, the paste
occasion shall be triggered. The next instance is to intercept the paste operation, the information within the clipboard is taken out by the script.