WebExtensions can interact with the system clipboard using document.execCommand()
:
* document.execCommand("copy")
copies the current selection to the clipboard.
* document.execCommand("cut")
cuts the current selection to the clipboard.
* document.execCommand("paste")
pastes the clipboard contents at the insertion point.
Writing to the clipboard
You can use the "cut" and "copy" commands without any special permission if you are using them in a short-lived event handler for a user action (for example, a click handler).
For example, suppose you've got a popup that includes the following HTML:
<input id="input" type="text"/> <button id="copy">Copy</button> <br/>
To make the "copy" button copy the contents of "input", you can use code like this:
function copy() { var copyText = document.querySelector("#input"); copyText.select(); document.execCommand("Copy"); } document.querySelector("#copy").addEventListener("click", copy);
Because the execCommand()
call is inside a click event handler, you don't need any special permissions here.
However, let's say that instead, you trigger the copy from an alarm:
function copy() { var copyText = document.querySelector("#input"); copyText.select(); document.execCommand("Copy"); } chrome.alarms.create({ delayInMinutes: 0.1 }); chrome.alarms.onAlarm.addListener(copy);
Depending on the browser, this may not work. On Firefox, it will not work, and you'll see a message like this in your console:
"document.execCommand(‘cut’/‘copy’) was denied because it was not called from inside a short running user-generated event handler."
To enable this use case, you need to ask for the "clipboardWrite" permission. So: "clipboardWrite" enables you to write to the clipboard outside a short-lived event handler for a user action.
Browser-specific considerations
In Google Chrome:
- you can write to the clipboard like this in all execution contexts - background pages, content scripts, options pages, and popups.
- you don't actually need "clipboardWrite", even to write to the clipboard outside a user-generated event handler.
In Firefox, you can write to the clipboard like this in all contexts _except background pages_. In Firefox you can't select text or focus an input field in background pages, so you can't write to the clipboard from a background page.
Firefox only supports the "clipboardWrite" permission from version 51 onwards.