- Asynchronous Clipboard API
This text introduces these three strategies one after the other. That is my thirty seventh Medium article.
Doc.execCommand() is the standard methodology of manipulating the clipboard, which is supported by varied browsers. It helps the three operations of copy, reduce, and paste.
Copy or Lower 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. Notice that the copy operation is finest positioned within the occasion listener operate, triggered by the consumer (for instance, the consumer clicks a button). If the script is executed autonomously, some browsers could report an error. Lower operation can also be just like the copy operation.
When pasting, calling
Doc.execCommand('paste') will output the contents of the clipboard to the present focus ingredient.
Doc.execCommand() methodology is handy, it has some disadvantages. First, it could 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. For those who copy/paste a considerable amount of information, the web page will freeze. Some browsers will even pop up a immediate field and ask the consumer for permission. Presently, the web page will turn out to be unresponsive earlier than the consumer makes a alternative. To be able to resolve these issues, browser distributors have proposed an asynchronous Clipboard API.
Clipboard API is the next-generation clipboard operation methodology, which is extra highly effective and cheap than the standard
Doc.execCommand() methodology. All its operations are asynchronous and return Promise objects with out inflicting web page jams. Furthermore, it could put arbitrary content material (comparable to footage) into the clipboard. The
navigator.clipboard property returns the Clipboard object, and all operations are carried out by means of this object.
const clipboardObj = navigator.clipboard;
navigator.clipboard property returns
undefined, it implies that the present browser doesn’t help this API (you’ll be able to see the complete compatibly desk on Can I exploit…). Since customers could put delicate information (comparable 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. Nevertheless, the event setting (
localhost) permits using non-encrypted protocols. Secondly, the consumer’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 mechanically granted to the script, and the “learn permission” should be explicitly granted by the consumer. In different phrases, the script could be mechanically accomplished when writing to the clipboard, however when studying the clipboard, the browser will pop up a dialog field asking whether or not the consumer 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 should you paste the related code into the developer software and run it straight, an error could also be reported as a result of the present web page right now is the window of the developer software, not an online web page.
For those who paste the above code into the developer software and run it, an error will probably be reported. As a result of when the code is operating, 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 operating, 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 will probably be reported.
clipboard.readText() methodology is used to repeat the textual content information within the clipboard.
Within the above instance, after the consumer clicks on the web page, the textual content within the clipboard will probably be output. Notice that the browser will pop up a dialog field right now, asking the consumer whether or not to agree with the script to learn the clipboard.
If the consumer disagrees, the script will report an error. Presently, you need to use the
attempt...catch construction to deal with errors.
clipboard.learn() methodology is used to repeat the info within the clipboard, which could be textual content information or binary information (comparable to footage). This methodology requires express permission from the consumer. This methodology returns a Promise object. As soon as the state of the item 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() methodology. The
clipboardItem.sorts property returns an array whose members are the MIME sorts obtainable 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) methodology is used to learn the info of the clip merchandise and returns a Promise object. This methodology accepts the MIME sort of the clip merchandise as a parameter and returns the info of that sort. This parameter is required, in any other case, an error will probably be reported.
clipboard.writeText() methodology is used to put in writing textual content content material to the clipboard.
The above instance is that after the consumer clicks on the net web page, the script writes textual content information to the clipboard. This methodology doesn’t require consumer permission, however it’s best to place it in
attempt...catch to forestall errors.
clipboard.write() methodology is used to put in writing arbitrary information to the clipboard, which could be textual content information or binary information. This methodology accepts a ClipboardItem occasion as a parameter, which represents the info written to the clipboard.
Within the above instance, the script writes an image to the clipboard. Notice that the Chrome browser at present (till this author writes this text) solely helps writing photographs in PNG format.
clipboardItem() is a constructor natively supplied by the browser to generate an occasion of
clipboardItem. It accepts an object as a parameter. The important thing identify of the item is the MIME sort of the info, and the important thing worth is the info itself. The next instance is to put in writing 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 completely different events.
When the consumer places information into the clipboard, the
copy occasion will probably be triggered. The next instance is to transform the textual content that the consumer 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, you might want to specify the info sort.
Occasion.clipboardData.getData(sort): To acquire clipboard information, you might want to specify the info sort.
Occasion.clipboardData.clearData([type]): Clear clipboard information, you’ll be able to specify the info sort. If you don’t specify the kind, all varieties of information will probably be cleared.
Occasion.clipboardData.objects: An array-like object comprises all clip objects, however often there is just one clip merchandise
The next instance is to intercept the consumer’s copy operation and put the required 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
reduce occasion is triggered when the consumer performs a chopping operation. Its processing is precisely the identical because the
copy occasion, and the reduce information can also be obtained from the
When the consumer makes use of the clipboard information to stick, the
paste occasion will probably be triggered. The next instance is to intercept the paste operation, the info within the clipboard is taken out by the script.