Spec-Zone.ru › Web APIs

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, прежде чем пытаться записать данные.

Методы экземпляра

getType()

Возвращает Promise, который разрешается объектом Blob запрошенного типа 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 133
98–133Принимает только Blob или промис, разрешающий Blob в качестве данных элемента.
76–98Принимает только Blob в качестве данных элемента. См. ошибку 40103226.
133
98–133Принимает только Blob или промис, разрешающий Blob в качестве данных элемента.
79–98Принимает только Blob в качестве данных элемента. См. ошибку 40103226.
127
84Принимает только Blob или промис, разрешающий Blob в качестве данных элемента.
63–84Принимает только Blob в качестве данных элемента. См. ошибку 40103226.
13.1 98
84–98Конструктор ClipboardItem принимает только blob в качестве данных элемента, но не строки или промисы, разрешающие строки или blob. См. ошибку 40103226.
127 68
60–68Конструктор ClipboardItem принимает только blob в качестве данных элемента, но не строки или промисы, разрешающие строки или blob. См. ошибку 40103226.
13.4 18.0
14.0–18.0Конструктор ClipboardItem принимает только blob в качестве данных элемента, но не строки или промисы, разрешающие строки или blob. См. ошибку 40103226.
98
84–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

См. также

  • API буфера обмена
  • Статья о поддержке изображений для Async Clipboard

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API