Spec-Zone.ru › Web APIs

API буфера обмена

API буфера обмена предоставляет возможность реагировать на команды буфера обмена (вырезать, копировать и вставить), а также асинхронно читать из и записывать в системный буфер обмена.

Примечание: Используйте этот API вместо устаревшего метода document.execCommand() для доступа к буферу обмена.

Примечание: Этот API не доступен в Потоках Web Workers (не экспонируется через WorkerNavigator).

Концепции и использование

Системный буфер обмена — это буфер данных, принадлежащий операционной системе, на которой работает браузер, который используется для кратковременного хранения данных и/или передачи данных между документами или приложениями. Обычно он реализуется как анонимный временный буфер данных, иногда называемый буфером вставки, к которому можно получить доступ из большинства или всех программ в среде через определённые программные интерфейсы.

API буфера обмена позволяет пользователям программно читать и записывать текст и другие типы данных в системный буфер обмена в безопасных контекстах, при условии, что пользователь соответствует критериям, описанным в разделе Обеспечение безопасности.

События генерируются в результате операций cut, copy и paste, которые изменяют буфер обмена. События имеют действие по умолчанию, например, действие по умолчанию для события copy копирует текущий выделенный фрагмент в системный буфер обмена. Действие по умолчанию может быть переопределено обработчиком событий — см. информацию по каждому из событий.

Интерфейсы

Clipboard Безопасный контекст

Предоставляет интерфейс для чтения и записи текста и данных в или из системного буфера обмена. В спецификации это упоминается как 'Async Clipboard API'.

ClipboardEvent

Представляет события, предоставляющие информацию, связанную с изменением буфера обмена, то есть событиями cut, copy и paste. В спецификации это упоминается как 'Clipboard Event API'.

ClipboardItem Безопасный контекст

Представляет отдельный формат элемента, используемый при чтении или записи данных.

Расширения других интерфейсов

API буфера обмена расширяет следующие API, добавляя перечисленные возможности.

Navigator.clipboard Только чтение Безопасный контекст

Возвращает объект Clipboard, который предоставляет чтение и запись в системный буфер обмена.

Element copy событие

Событие, генерируемое при инициации пользователем действия копирования.

Element cut событие

Событие, генерируемое при инициации пользователем действия вырезания.

Element paste событие

Событие, генерируемое при инициации пользователем действия вставки.

Обеспечение безопасности

API буфера обмена позволяет пользователям программно читать и записывать текст и другие типы данных в системный буфер обмена в безопасных контекстах.

Спецификация требует, чтобы пользователь недавно взаимодействовал со страницей для чтения из буфера обмена (временная активация пользователя требуется). Если операция чтения вызвана взаимодействием пользователя с элементом вставки браузера или операционной системы (например, контекстным меню), браузер должен запросить подтверждение пользователя. Для записи в буфер обмена спецификация предполагает, что странице предоставлено разрешение API разрешений clipboard-write, и браузер также может потребовать временную активацию пользователя. Браузеры могут ввести дополнительные ограничения на использование методов доступа к буферу обмена.

Реализации браузеров расходятся со спецификацией. Различия отражены в разделе Совместимость с браузерами, и текущее состояние обобщено ниже:

Браузеры Chromium:

  • Для чтения требуется, чтобы было предоставлено разрешение API разрешений clipboard-read. Временная активация не требуется.
  • Для записи требуется либо разрешение clipboard-read, либо временная активация. Если разрешение предоставлено, оно сохраняется, и дополнительная временная активация не требуется.
  • Для элементов <iframe>, которые обращаются к буферу обмена, должны быть разрешены разрешения HTTP Permissions-Policy clipboard-read и clipboard-write.
  • Постоянный запрос на вставку не отображается при операции чтения, вызванной элементом вставки браузера или операционной системы.

Firefox & Safari:

  • Для чтения и записи требуется временная активация.
  • Запрос на вставку подавляется при чтении данных из буфера обмена с одинаковым происхождением, но не с разным происхождением.
  • Разрешения clipboard-read и clipboard-write не поддерживаются (и не планируются к поддержке) в Firefox или Safari.

Firefox Расширения WebExtensions:

  • Чтение текста доступно только для расширений с разрешением Web Extension clipboardRead. С этим разрешением расширение не требует временной активации или запроса на вставку.
  • Запись текста доступна в безопасном контексте и с временной активацией. С разрешением Web Extension clipboardWrite временная активация не требуется.

Примеры

Доступ к буферу обмена

Системный буфер обмена доступен через глобальную переменную 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

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
ClipboardItem 133
98–133Принимает только Blob или Promise, разрешающую Blob в качестве данных элемента.
76–98Принимает только Blob в качестве данных элемента. См. ошибку 40103226.
133
98–133Принимает только Blob или Promise, разрешающую Blob в качестве данных элемента.
79–98Принимает только Blob в качестве данных элемента. См. ошибку 40103226.
127
84Принимает только Blob или Promise, разрешающую Blob в качестве данных элемента.
63–84Принимает только Blob в качестве данных элемента. См. ошибку 40103226.
13.1 98
84–98Конструктор ClipboardItem принимает только blob в качестве данных элемента, но не строки или Promises, разрешающие строки или blobs. См. ошибку 40103226.
127 68
60–68Конструктор ClipboardItem принимает только blob в качестве данных элемента, но не строки или Promises, разрешающие строки или blobs. См. ошибку 40103226.
13.4 18.0
14.0–18.0Конструктор ClipboardItem принимает только blob в качестве данных элемента, но не строки или Promises, разрешающие строки или blobs. См. ошибку 40103226.
98
84–98Конструктор ClipboardItem принимает только blob в качестве данных элемента, но не строки или Promises, разрешающие строки или blobs. См. ошибку 40103226.
Clipboard_API 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
Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
ClipboardEvent 58 17 22 45 10.1 58 22 43 10.3 7.0 58
Clipboard_API 41 12 22 28 10.1 41 22 28 10.3 4.0 41
clipboardData 41 12 22 28 10.1 41 22 28 10.3 4.0 41
Настольный Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
Clipboard_API 66 79 63 53 13.1 66 63 47 13.4 9.0 66
read
76Пользователь должен предоставить разрешение clipboard-read.
79Пользователь должен предоставить разрешение clipboard-read.
127["Этот метод должен вызываться в обработчиках событий жестов пользователя.", "Веб-расширениям требуется разрешение clipboardRead в манифесте для чтения данных. С этим разрешением расширению не требуется взаимодействие с пользователем и не отображается запрос на вставку.", "Запрос на вставку отображается при чтении буфера обмена. Если буфер обмена содержит контент того же происхождения, запрос подавляется."]
63Пользователь должен предоставить разрешение clipboard-read.
13.1
76Пользователь должен предоставить разрешение clipboard-read.
127["Этот метод должен вызываться в обработчиках событий жестов пользователя.", "Веб-расширениям требуется разрешение clipboardRead в манифесте для чтения данных. С этим разрешением расширению не требуется взаимодействие с пользователем и не отображается запрос на вставку.", "Запрос на вставку отображается при чтении буфера обмена. Если буфер обмена содержит контент того же происхождения, запрос подавляется."]
54Пользователь должен предоставить разрешение clipboard-read.
13.4
12.0Пользователь должен предоставить разрешение clipboard-read.
76Пользователь должен предоставить разрешение clipboard-read.
readText
66Пользователь должен предоставить разрешение clipboard-read.
79Пользователь должен предоставить разрешение clipboard-read.
125["Этот метод должен вызываться в обработчиках событий жестов пользователя.", "Веб-расширениям требуется разрешение clipboardRead в манифесте для чтения данных. С этим разрешением расширению не требуется взаимодействие с пользователем и не отображается запрос на вставку.", "Запрос на вставку отображается при чтении буфера обмена. Если буфер обмена содержит контент того же происхождения, запрос подавляется."]
53Пользователь должен предоставить разрешение clipboard-read.
13.1
66Пользователь должен предоставить разрешение clipboard-read.
125["Этот метод должен вызываться в обработчиках событий жестов пользователя.", "Веб-расширениям требуется разрешение clipboardRead в манифесте для чтения данных. С этим разрешением расширению не требуется взаимодействие с пользователем и не отображается запрос на вставку.", "Запрос на вставку отображается при чтении буфера обмена. Если буфер обмена содержит контент того же происхождения, запрос подавляется."]
47Пользователь должен предоставить разрешение clipboard-read.
13.4
9.0Пользователь должен предоставить разрешение clipboard-read.
66Пользователь должен предоставить разрешение clipboard-read.
type_image-png 76 79 127 63 13.1 76 127 54 13.4 12.0 76
type_text-html 86 86 127 72 13.1 86 127 61 13.4 14.0 86
type_text-plain 76 79 127 63 13.1 76 127 54 13.4 12.0 76
write
76["Начиная с версии 107, этот метод должен вызываться в обработчиках событий жестов пользователя, или пользователь должен предоставить разрешение clipboard-write.", "До версии 107 пользователь должен предоставить разрешение clipboard-write."]
79
127["Этот метод должен вызываться в обработчиках событий жестов пользователя.", "Веб-расширениям требуется разрешение clipboardWrite в манифесте для чтения данных. С этим разрешением расширению не требуется взаимодействие с пользователем и не отображается запрос на вставку.", "Запрос на вставку отображается при чтении буфера обмена. Если буфер обмена содержит контент того же происхождения, запрос подавляется."]
63["Начиная с версии 93, этот метод должен вызываться в обработчиках событий жестов пользователя, или пользователь должен предоставить разрешение clipboard-write.", "До версии 93 пользователь должен предоставить разрешение clipboard-write."]
13.1
76["Начиная с версии 107, этот метод должен вызываться в обработчиках событий жестов пользователя, или пользователь должен предоставить разрешение clipboard-write.", "До версии 107 пользователь должен предоставить разрешение clipboard-write."]
127["Этот метод должен вызываться в обработчиках событий жестов пользователя.", "Веб-расширениям требуется разрешение clipboardWrite в манифесте для чтения данных. С этим разрешением расширению не требуется взаимодействие с пользователем и не отображается запрос на вставку.", "Запрос на вставку отображается при чтении буфера обмена. Если буфер обмена содержит контент того же происхождения, запрос подавляется."]
54["Начиная с версии 73, этот метод должен вызываться в обработчиках событий жестов пользователя, или пользователь должен предоставить разрешение clipboard-write.", "До версии 73 пользователь должен предоставить разрешение clipboard-write."]
13.4
12.0["Начиная с версии 21.0, этот метод должен вызываться в обработчиках событий жестов пользователя, или пользователь должен предоставить разрешение clipboard-write.", "До версии 21.0 пользователь должен предоставить разрешение clipboard-write."]
76["Начиная с версии 107, этот метод должен вызываться в обработчиках событий жестов пользователя, или пользователь должен предоставить разрешение clipboard-write.", "До версии 107 пользователь должен предоставить разрешение clipboard-write."]
writeText
66["С версии 107 этот метод должен вызываться в обработчиках событий пользовательских жестов или пользователь должен предоставить разрешение clipboard-write, "До версии 107 пользователь должен предоставить разрешение clipboard-write."]
79["С версии 107 этот метод должен вызываться в обработчиках событий пользовательских жестов или пользователь должен предоставить разрешение clipboard-write.", "До версии 107 пользователь должен предоставить разрешение clipboard-write."]
63["Этот метод должен вызываться в обработчиках событий пользовательских жестов.", "Веб-расширениям для чтения данных необходимо разрешение clipboardRead в манифесте. С этим разрешением расширение не требует пользовательского взаимодействия и не отображает запрос вставки.", "При чтении буфера обмена отображается запрос вставки. Если буфер обмена содержит контент одного источника, запрос подавляется."]
53["С версии 93 этот метод должен вызываться в обработчиках событий пользовательских жестов или пользователь должен предоставить разрешение clipboard-write.", "До версии 93 пользователь должен предоставить разрешение clipboard-write."]
13.1Этот метод должен вызываться в обработчиках событий пользовательских жестов.
66["С версии 107 этот метод должен вызываться в обработчиках событий пользовательских жестов или пользователь должен предоставить разрешение clipboard-write.", "До версии 107 пользователь должен предоставить разрешение clipboard-write."]
63["Этот метод должен вызываться в обработчиках событий пользовательских жестов.", "Веб-расширениям для чтения данных необходимо разрешение clipboardRead в манифесте. С этим разрешением расширение не требует пользовательского взаимодействия и не отображает запрос вставки.", "При чтении буфера обмена отображается запрос вставки. Если буфер обмена содержит контент одного источника, запрос подавляется."]
47["С версии 73 этот метод должен вызываться в обработчиках событий пользовательских жестов или пользователь должен предоставить разрешение clipboard-write.", "До версии 73 пользователь должен предоставить разрешение clipboard-write."]
13.4Этот метод должен вызываться в обработчиках событий пользовательских жестов.
9.0["С версии 21.0 этот метод должен вызываться в обработчиках событий пользовательских жестов или пользователь должен предоставить разрешение clipboard-write.", "До версии 21.0 пользователь должен предоставить разрешение clipboard-write."]
66["С версии 107 этот метод должен вызываться в обработчиках событий пользовательских жестов или пользователь должен предоставить разрешение clipboard-write.", "До версии 107 пользователь должен предоставить разрешение clipboard-write."]

api.БуферОбмена

Таблицы BCD загружаются только в браузере

api.СобытиеБуфераОбмена

Таблицы BCD загружаются только в браузере

api.ЭлементБуфераОбмена

Таблицы BCD загружаются только в браузере

См. также

  • Статья о поддержке изображений для 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/Clipboard_API

Spec-Zone.ru

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