Clipboard API
剪贴板 API 提供了响应剪贴板命令(剪切、复制和粘贴)的能力,以及异步地读写系统剪贴板。
注意: 在访问剪贴板时,请优先使用此 API,而不是已弃用的 document.execCommand() 方法。
注意: 此 API 在 Web Workers 中不可用(未通过 WorkerNavigator 暴露)。
概念与用法
系统剪贴板 是托管浏览器的操作系统的一个数据缓冲区,用于短期数据存储和/或文档或应用程序之间的数据传输。它通常实现为一个匿名的、临时的 数据缓冲区,有时也称为粘贴缓冲区,可以通过定义的编程接口从环境中的大多数或所有程序访问。
剪贴板 API 允许用户在安全上下文中以编程方式读写系统剪贴板中的文本和其他类型的数据,前提是用户已满足安全注意事项中概述的标准。
当剪贴板因 cut、copy 和 paste 操作而修改时,会触发事件。事件有默认操作,例如 `copy` 操作默认将当前选区复制到系统剪贴板。事件处理程序可以覆盖默认操作——有关更多信息,请参阅每个事件。
接口
Clipboard安全上下文-
提供一个接口,用于向系统剪贴板读写文本和数据。规范称之为“异步剪贴板 API”。
ClipboardEventClipboardItem安全上下文-
表示单个项目格式,用于读写数据。
其他接口的扩展
剪贴板 API 扩展了以下 API,并添加了列出的功能。
安全注意事项
剪贴板 API 允许用户在安全上下文中以编程方式读写系统剪贴板中的文本和其他类型的数据。
从剪贴板读取时,规范要求用户最近与页面进行了交互(临时用户激活),并且调用是在用户与浏览器或操作系统“粘贴元素”(例如在原生上下文菜单中选择“粘贴”)交互的结果下进行的。实际上,浏览器通常允许不满足这些要求的读取操作,但会施加其他要求(例如权限或每个操作的提示)。对于写入剪贴板,规范期望页面已获得 Permissions API 的 `clipboard-write` 权限,并且浏览器也可能需要临时用户激活。浏览器可能会对访问剪贴板的方法施加额外的限制。
浏览器实现已偏离规范。差异已在浏览器兼容性部分捕获,并且当前状态总结如下:
Chromium 浏览器
- 如果规范不允许读取,并且文档具有焦点,它会触发一个请求使用 `clipboard-read` 权限的请求,如果权限被授予(无论是用户接受了提示,还是权限已预先授予),则读取成功。
- 写入操作需要 `clipboard-write` 权限或临时激活。如果授予了权限,则该权限会持久化,并且不再需要临时激活。
- 对于访问剪贴板的
<iframe>元素,必须允许 HTTP Permissions-Policy 权限 `clipboard-read` 和 `clipboard-write`。
Firefox 和 Safari
- 如果规范不允许读取,但仍然满足临时用户激活,则会触发一个临时上下文菜单形式的用户提示,其中只有一个“粘贴”选项(该选项在 1 秒后启用),如果用户选择该选项,则读取成功。
- 写入操作需要临时激活。
- 如果读取同源剪贴板内容,则会抑制粘贴提示,但不会抑制读取跨域内容。
- Firefox 或 Safari 不支持(也不计划支持)`clipboard-read` 和 `clipboard-write` 权限。
Firefox Web 扩展
示例
访问剪贴板
系统剪贴板通过 Navigator.clipboard 全局对象访问。
此代码段从剪贴板获取文本并将其附加到找到的第一个类名为 `editor` 的元素。由于 readText() 在剪贴板不是文本时返回空字符串,因此此代码是安全的。
navigator.clipboard
.readText()
.then(
(clipText) => (document.querySelector(".editor").innerText += clipText),
);
规范
| 规范 |
|---|
| Clipboard API 和事件 # clipboard-interface |
| Clipboard API 和事件 # clipboard-event-interfaces |
| Clipboard API 和事件 # clipboarditem |
浏览器兼容性
api.Clipboard
加载中…
api.ClipboardEvent
加载中…
api.ClipboardItem
加载中…