ClipboardItem
Базовая версия 2024 *
Новое
С июня 2024 года эта функция работает на последних версиях устройств и браузеров. Возможны проблемы с более старыми устройствами или браузерами.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.
Интерфейс ClipboardItem из API буфера обмена представляет собой формат одного элемента, используемый при чтении или записи данных буфера обмена с помощью Clipboard.read() и Clipboard.write() соответственно.
Интерфейс ClipboardItem позволяет разработчикам использовать один тип для представления различных форматов данных.
Примечание: Методы read() и write() могут использоваться для работы со строками текста и произвольными данными, представленными экземплярами Blob. Однако, если вы работаете только с текстом, удобнее использовать методы Clipboard.readText() и Clipboard.writeText().
Конструктор
ClipboardItem()-
Создаёт новый объект
ClipboardItem, с типом MIME в качестве ключа и данными в качестве значения.
Свойства экземпляра
-
typesТолько чтение -
Возвращает массив
Arrayдоступных типов MIME в пределахClipboardItem. -
presentationStyleТолько чтение -
Возвращает одно из следующих значений:
"unspecified","inline"или"attachment".
Статические методы
ClipboardItem.supports()-
Проверяет, поддерживается ли заданный тип MIME в буфере обмена. Это позволяет веб-сайту определить, поддерживается ли тип MIME, прежде чем пытаться записать данные.
Методы экземпляра
Примеры
Запись текста в буфер обмена
В этом примере мы сначала определяем две константы, содержащие ссылки на элемент <p> с текстом и элемент <button>.
Далее, мы определяем функцию copyToClipboard(). Она начинает с сохранения типа MIME "text/plain" в константе, затем создаёт объект clipboardItemData, содержащий одно свойство с ключом, равным типу MIME, и значением текста, который нужно скопировать в буфер обмена (содержимое элемента <p> в данном случае). Поскольку мы работаем с текстом, мы можем передать его напрямую, а не создавать объект Blob.
Мы создаём новый объект ClipboardItem с помощью конструктора ClipboardItem() и передаём его в метод Clipboard.write() для копирования текста в буфер обмена.
Наконец, мы добавляем обработчик событий к элементу <button>, чтобы при нажатии выполнялась функция.
const textSource = document.querySelector("p");
const copyBtn = document.querySelector("button");
async function copyToClipboard() {
const type = "text/plain";
const clipboardItemData = {
[type]: textSource.textContent,
};
const clipboardItem = new ClipboardItem(clipboardItemData);
await navigator.clipboard.write([clipboardItem]);
}
copyBtn.addEventListener("click", copyToClipboard);
Запись изображения в буфер обмена
Здесь мы используем supports() для проверки поддержки типа MIME данных image/svg+xml. Если поддержка есть, мы загружаем изображение SVG с помощью Fetch API, а затем считываем его в Blob, который мы можем использовать для создания объекта ClipboardItem, записываемого в буфер обмена.
async function writeClipImg() {
try {
if (ClipboardItem.supports("image/svg+xml")) {
const imgURL = "/my-image.svg";
const data = await fetch(imgURL);
const blob = await data.blob();
await navigator.clipboard.write([
new ClipboardItem({
[blob.type]: blob,
}),
]);
console.log("Fetched image copied.");
} else {
console.log("SVG images are not supported by the clipboard.");
}
} catch (err) {
console.error(err.name, err.message);
}
}
Чтение из буфера обмена
Здесь мы возвращаем все элементы в буфере обмена через метод clipboard.read(). Затем используем свойство ClipboardItem.types для задания аргумента getType() и возвращения соответствующего объекта blob.
async function getClipboardContents() {
try {
const clipboardItems = await navigator.clipboard.read();
for (const clipboardItem of clipboardItems) {
for (const type of clipboardItem.types) {
const blob = await clipboardItem.getType(type);
// we can now use blob here
}
}
} catch (err) {
console.error(err.name, err.message);
}
}
Спецификации
| Спецификация |
|---|
| Clipboard API и события # clipboarditem |
Совместимость браузеров
| Рабочий стол | Мобильный телефон | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
ClipboardItem |
13398–133Принимает толькоBlob или промис, разрешающий Blob в качестве данных элемента. |
13398–133Принимает толькоBlob или промис, разрешающий Blob в качестве данных элемента. |
127 |
84Принимает толькоBlob или промис, разрешающий Blob в качестве данных элемента. |
13.1 | 9884–98КонструкторClipboardItem принимает только blob в качестве данных элемента, но не строки или промисы, разрешающие строки или blob. См. ошибку 40103226. |
127 | 6860–68КонструкторClipboardItem принимает только blob в качестве данных элемента, но не строки или промисы, разрешающие строки или blob. См. ошибку 40103226. |
13.4 | 18.014.0–18.0КонструкторClipboardItem принимает только blob в качестве данных элемента, но не строки или промисы, разрешающие строки или blob. См. ошибку 40103226. |
9884–98КонструкторClipboardItem принимает только blob в качестве данных элемента, но не строки или промисы, разрешающие строки или blob. См. ошибку 40103226. |
ClipboardItem |
76 | 79 | 127 | 63 | 13.1 | 84 | 127 | 60 | 13.4 | 14.0 | 84 |
getType |
76 | 79 | 127 | 63 | 13.1 | 84 | 127 | 60 | 13.4 | 14.0 | 84 |
presentationStyle |
Нет | Нет | 127 | Нет | 13.1 | Нет | 127 | Нет | 13.4 | Нет | Нет |
supports_static |
121 | 121 | 127 | 107 | Нет | 121 | 127 | 81 | Нет | 25.0 | 121 |
type_image_svg_xml |
124 | 124 | Нет | 110 | Нет | 124 | Нет | 82 | Нет | 27.0 | 124 |
type_web |
104 | 104 | Нет | 90 | Нет | 104 | Нет | 71 | Нет | 20.0 | 104 |
types |
76 | 79 | 127 | 63 | 13.1 | 84 | 127 | 60 | 13.4 | 14.0 | 84 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ClipboardItem