clipboard¶
<!--
``YAML history
deprecated:
- pr-url: https://github.com/electron/electron/pull/48877
description: "Using theclipboard` API directly in the renderer process is deprecated."
breaking-changes-header: deprecated-clipboard-api-access-from-renderer-processes
-->
> 对系统剪贴板执行复制和粘贴操作。
进程:[主进程](../glossary.md#main-process)
`clipboard` 模块以 [W3C Clipboard API](https://w3c.github.io/clipboard-apis/#clipboard-interface) 为模型:
`clipboard.read()` 返回一个 `Promise`,解析为 [`ClipboardItem`](clipboard-item.md) 对象列表,而 `clipboard.write()`
接受一个 `ClipboardItem` 实例数组,这些实例将 [MIME 类型](https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types)
映射到 [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) 负载。
除了标准 MIME 类型(`text/plain`、`text/html`、
`text/rtf`、`image/png`、`image/jpeg`、…)之外,Electron 还暴露了一组
自定义格式,以便剪贴板可以承载桌面特定的负载。这些格式遵循 W3C
[自定义格式提案](https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-pickling/explainer.md#custom-formats),
使用 `electron` 前缀而不是 `web` 以避免冲突。Electron
暴露的自定义格式包括:
* `electron application/bookmark` — URL 书签。与其他所有
MIME 类型/自定义格式不同,其负载在写入和读取两侧都是 [ClipboardBookmark](structures/clipboard-bookmark.md) 对象,
而不是 `Blob`,因此
`getType('electron application/bookmark')` 解析为
`{ title: string, url: string }`。
* `electron application/findtext`(_macOS_)— 当前活动应用的
查找粘贴板内容。
* `electron application/osclipboard;format="<name>"` — 平台特定剪贴板格式的原始负载。
`<name>` 是平台格式(例如 Windows 上的 `HTML Format` 或
macOS 上的 `public.utf8-plain-text`)。`clipboard.read()` 还会通过此自定义格式暴露
任何没有标准 MIME 映射的平台剪贴板格式,因此原始系统格式在写入和读取时通过同一字符串
往返。
除众所周知的 MIME 类型外,`clipboard.read()` 和
`clipboard.write()` 都接受任意 MIME 类型,包括以
`web` 前缀开头(后跟一个空格,例如 `web application/x.my-format`)
并遵循 W3C [web 自定义格式提案](https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-pickling/explainer.md#custom-formats) 的自定义格式。
```js
const { clipboard, ClipboardItem } = require('electron')
async function writeClipboard () {
await clipboard.write([
new ClipboardItem({
'web application/x.my-app-clip': new Blob(['arbitrary payload'])
})
])
}
writeClipboard()
在 Linux 上还有一个 selection 剪贴板。它通过
clipboard.selection 子命名空间暴露,
该子命名空间镜像顶层 clipboard 接口。
selection 剪贴板针对选择剪贴板而不是系统剪贴板进行操作。
它暴露了与顶层 clipboard 模块相同的接口,但
每个方法都针对选择剪贴板而不是系统剪贴板。这两个剪贴板相互独立:通过
clipboard.selection 写入不会影响 clipboard.read() 返回的数据
(反之亦然)。
[!NOTE]
selection剪贴板不支持 W3C web 自定义格式。
const { clipboard } = require('electron')
async function run () {
await clipboard.selection.writeText('Example string')
console.log(await clipboard.selection.readText())
}
run()
方法¶
clipboard 模块具有以下方法。
clipboard.readText()¶
返回 Promise<string> - 一个解析为剪贴板内容(纯文本)的
Promise。以 W3C
navigator.clipboard.readText
API 为模型。
const { clipboard } = require('electron')
async function readText () {
await clipboard.writeText('hello i am a bit of text!')
const text = await clipboard.readText()
console.log(text)
// 'hello i am a bit of text!'
}
readText()
clipboard.writeText(text)¶
text字符串
返回 Promise<void> - 一个在文本写入剪贴板后解析的
Promise。以 W3C
navigator.clipboard.writeText
API 为模型。
const { clipboard } = require('electron')
async function writeClipboardText () {
await clipboard.writeText('hello i am a bit of text!')
}
writeClipboardText()
clipboard.read()¶
返回 Promise<ClipboardItem[]> - 一个解析为包含剪贴板内容的
ClipboardItem 对象数组的 Promise。
const { clipboard } = require('electron')
async function dumpClipboard () {
const items = await clipboard.read()
for (const item of items) {
for (const type of item.types) {
const blob = await item.getType(type)
console.log(type, blob)
}
}
}
dumpClipboard()
clipboard.write(data)¶
dataClipboardItem[] - 一个由new ClipboardItem({ [mime]: payload })构造的ClipboardItem实例数组。
返回 Promise<void> - 在数据写入剪贴板后解析。单次
write() 调用中提供的所有条目都会原子性地提交到系统剪贴板。
const { clipboard, ClipboardItem, nativeImage } = require('electron')
const png = nativeImage.createFromPath('/path/to/icon.png').toPNG()
async function writeClipboard () {
await clipboard.write([
new ClipboardItem({
'text/plain': 'hello',
'text/html': '<b>hello</b>',
'image/png': new Blob([png], { type: 'image/png' }),
'electron application/bookmark': {
title: 'Electron',
url: 'https://electronjs.org'
}
})
])
}
writeClipboard()
clipboard.has(mimetype)¶
mimetypestring - 要检查的 MIME 类型
返回 Promise<boolean> - 一个 Promise,如果剪贴板包含指定 mimetype 的数据,则以 true 解析,否则为 false。要检查原始格式,例如 public/utf8-plain-text,请使用 electron application/osclipboard 自定义格式(electron application/osclipboard;format="public/utf8-plain-text")。
const { clipboard } = require('electron')
async function check () {
const hasFormat = await clipboard.has('text/html')
console.log(hasFormat)
// 'true' or 'false'
const rawFormat = 'electron application/osclipboard;format="public/utf8-plain-text"'
const hasRawFormat = await clipboard.has(rawFormat)
}
check()
clipboard.clear()¶
清除剪贴板内容。
属性¶
clipboard.selection Linux 只读¶
Clipboard 属性 — 在 Linux 上,这是一个 Clipboard 对象,它操作的是选择剪贴板而不是系统剪贴板;在所有其他平台上为 undefined。它暴露了与顶层 clipboard 模块相同的 read、write、readText、writeText、has 和 clear 方法。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron