WebExtensions能通过document.execCommand()与系统粘贴板互动 :

  • document.execCommand("copy")
  • document.execCommand("cut")
  • document.execCommand("paste")

写入系统粘贴板

在用户行为的临时事件处理程序中,不需要特别允许就能使用 "cut" 和 "copy"命令  (例如,单击事件)。

例如,假设你有一个下面的弹出菜单页面:

<input id="input" type="text"/>
<button id="copy">Copy</button>

使 "copy"按钮能复制 "input"中的文本,代码如下:

function copy() {
  var copyText = document.querySelector("#input");
  copyText.select();
  document.execCommand("Copy");
}

document.querySelector("#copy").addEventListener("click", copy);

由于execCommand()命令在单击事件中,所以不需要特别的权限。

此外,如果用警报(alarm)替换上面的命令来触发复制事件:

function copy() {
  var copyText = document.querySelector("#input");
  copyText.select();
  document.execCommand("Copy");
}

browser.alarms.create({
  delayInMinutes: 0.1
});

browser.alarms.onAlarm.addListener(copy);

这种触发不一定成功,它取决于浏览器是否支持。Firefox浏览器就不支持该功能,你会在浏览器控制台中看到以下信息:

"document.execCommand(‘cut’/‘copy’) was denied because it was not called from inside a short running user-generated event handler."

为了能够在这种情形下使用,你需要拥有"clipboardWrite"的权限( permission)。 因此,"clipboardWrite"权限能使你不通过临时事件处理程序就可以写入系统粘贴板中。

特定浏览器注意事项

在Chrome中:

  • 你可以在所有执行上下文中写入系统粘贴板,像背景网页、内容脚本、标签页和弹出菜单。
  • 你不需要 "clipboardWrite"权限,甚至不需要在用户生成的事件处理程序中写入粘贴板

在Firefox中:

  • 除了背景网页外,你可以在所有执行上下文中写入粘贴板。在Firefox中,不能选择文本或让背景网页中的文本框获得焦点,因此不能通过背景网页写入系统粘贴板。
  • 只有version 51以上才支持"clipboardWrite" 权限。

读取系统粘贴板

为了能使用 "paste" 命令,必须拥有 "clipboardRead"权限(permission)。 例如,假设你的HTML页面内容如下:

<input id="output" type="text"/>
<button id="paste">Paste</button>

要在用户单击 "paste" 时,通过系统粘贴板设置 "output" 的内容,可以使用如下代码:

function paste() {
  var pasteText = document.querySelector("#output");
  pasteText.focus();
  document.execCommand("Paste");
}

document.querySelector("#paste").addEventListener("click", paste);

即使在用户生成的事件处理程序中,还是需要拥有“ clipboardRead ”权限。

特定浏览器注意事项

Firefox还不支持"clipboardRead"权限(permission) (bug 1312260),因此还不能从系统粘贴板中读取数据。

文档标签和贡献者

 此页面的贡献者: Olimpic2008
 最后编辑者: Olimpic2008,