ClipboardItem¶
单个剪贴板条目,将一个或多个带 MIME 类型的负载配对在一起。
进程:主进程
ClipboardItem 以 W3C
ClipboardItem
类为模型。每个 ClipboardItem 承载一个或多个带 MIME 类型的负载,这些负载
表示同一个概念上的剪贴板条目——例如,一次复制操作同时暴露所选内容的
纯文本表示和 HTML 表示。
类:ClipboardItem¶
为
clipboard.write()构造剪贴板条目,或检查clipboard.read()返回的条目。
进程:主进程
[!WARNING] Electron 的内置类不能在用户代码中被子类化。 更多信息,请参阅常见问题。
new ClipboardItem(items)¶
itemsRecord\<string, string | ClipboardBookmark | Blob | Promise\<Blob | string>> - 一个对象,其键为 MIME 类型 且其值为该类型的负载。对应 W3CClipboardItem(items)构造函数的items参数。每个 MIME 类型都接受string或Blob:string会按 W3C 规范的要求以 UTF-8 编码为负载字节,而Blob提供原始负载字节。electron application/bookmark自定义格式是唯一例外——它 接受 ClipboardBookmark 对象。 任何非书签值也可以是解析为Blob或string的Promise; 在调用clipboard.write()时会等待它。
创建一个描述单个剪贴板条目的新 ClipboardItem,该条目具有一个或多个
带 MIME 类型的表示。构造出的条目可以传递给
clipboard.write()。每个 Blob 或
Promise 负载会在调用 clipboard.write() 时异步解析。
[!WARNING] 不要直接使用不可信对象构造
ClipboardItem(例如,通过 IPC 从渲染进程 接收的负载)。MIME 键是一种能力面:text/uri-list会将真实文件引用 放到操作系统剪贴板上(使文件可以粘贴到另一个应用程序中),而electron application/osclipboard;format=...和以web为前缀(例如web application/x.my-format)的格式会写入原始平台数据。在从您未创建的 数据构建ClipboardItem之前,请验证 MIME 类型并将其加入允许列表—— 同时验证每个负载的结构。
// Each `ClipboardItem` describes one clipboard entry with one or more
// MIME-typed representations. The bookmark custom format takes a structured
// `{ title, url }` object instead of a Blob.
const { clipboard, ClipboardItem, nativeImage } = require('electron')
const png = nativeImage.createFromPath('/path/to/icon.png').toPNG()
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'
}
})
])
文件:text/uri-list MIME 类型¶
text/uri-list MIME 类型被映射到操作系统的原生“已复制文件”剪贴板格式
(Windows 上的 CF_HDROP、macOS 上的 NSFilenamesPboardType,
以及 Linux 上的 text/uri-list),而不是作为通用文本负载存储。
这使得 Electron 写入的剪贴板条目可以作为文件粘贴到 Finder、
资源管理器或文件管理器等原生应用程序中,并让 Electron 读取
从这些应用程序复制的文件。
负载是一个 RFC 2483 URI
列表:每行一个 file:// URI,以 CRLF 分隔。使用
url.pathToFileURL
将绝对路径转换为 file:// URI。尽管 RFC 2483 允许任何 URI 方案,
但该格式仅限文件——非 file:// URI 会被忽略。
读取时,getType('text/uri-list') 会解析为一个 Blob,其文本是
file:// URI 列表。由于这是一个特权主进程 API,解析出的 URI
包含文件的真实绝对路径——这与渲染进程的 navigator.clipboard
不同,后者出于隐私考虑会对文件路径进行清理。
const { clipboard, ClipboardItem } = require('electron')
const { pathToFileURL } = require('node:url')
// Write two files to the clipboard so they can be pasted into the OS file
// manager.
clipboard.write([
new ClipboardItem({
'text/uri-list': [
pathToFileURL('/path/to/first.txt').href,
pathToFileURL('/path/to/second.txt').href
].join('\r\n')
})
])
// Read the files currently on the clipboard.
async function readFiles () {
const [item] = await clipboard.read()
if (item.types.includes('text/uri-list')) {
const blob = await item.getType('text/uri-list')
if (blob instanceof Blob) {
const uriList = await blob.text()
return uriList.split(/\r?\n/).filter(Boolean)
}
}
return []
}
实例属性¶
clipboardItem.types 只读¶
一个 string[] 属性——此条目所承载数据的 MIME 类型。
对于构造的 ClipboardItem,这些是传递给构造函数的键;
对于 clipboard.read() 返回的条目,
这些是平台剪贴板当前可用的 MIME 类型。
实例方法¶
clipboardItem.getType(type)¶
typestring - 要检索的 MIME 类型。
返回 Promise<Blob> | Promise<ClipboardBookmark> - 以给定 MIME 类型的负载解析。
以 W3C
ClipboardItem.getType
方法为模型。对于大多数 MIME 类型,该 Promise 会解析为 Blob;
唯一例外是 getType('electron application/bookmark'),
它会解析为 ClipboardBookmark 对象。
当 type 不存在于 clipboardItem.types 中时拒绝。
const { clipboard } = require('electron')
async function dumpClipboard () {
const items = await clipboard.read()
for (const item of items) {
for (const type of item.types) {
const payload = await item.getType(type)
console.log(type, payload)
}
}
}
clipboardItem.getType(bookmark)¶
bookmark'electron application/bookmark'
返回 Promise<ClipboardBookmark> - 当剪贴板中存在可用书签时,解析为 ClipboardBookmark
当剪贴板中不存在可用书签时,拒绝。
const { clipboard } = require('electron')
async function dumpClipboard () {
const bookmarkType = 'electron application/bookmark'
const items = await clipboard.read()
for (const item of items) {
if (item.types.includes(bookmarkType)) {
const bookmark = await item.getType(bookmarkType)
console.log('Bookmark found: ', bookmark)
} else {
console.log('There is no bookmark present')
}
}
}
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron