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, добавляя перечисленные возможности.
-
Возвращает объект
Clipboard, который предоставляет чтение и запись в системный буфер обмена. -
Elementcopyсобытие -
Событие, генерируемое при инициации пользователем действия копирования.
-
Elementcutсобытие -
Событие, генерируемое при инициации пользователем действия вырезания.
-
Elementpasteсобытие -
Событие, генерируемое при инициации пользователем действия вставки.
Обеспечение безопасности
API буфера обмена позволяет пользователям программно читать и записывать текст и другие типы данных в системный буфер обмена в безопасных контекстах.
Спецификация требует, чтобы пользователь недавно взаимодействовал со страницей для чтения из буфера обмена (временная активация пользователя требуется). Если операция чтения вызвана взаимодействием пользователя с элементом вставки браузера или операционной системы (например, контекстным меню), браузер должен запросить подтверждение пользователя. Для записи в буфер обмена спецификация предполагает, что странице предоставлено разрешение API разрешений clipboard-write, и браузер также может потребовать временную активацию пользователя. Браузеры могут ввести дополнительные ограничения на использование методов доступа к буферу обмена.
Реализации браузеров расходятся со спецификацией. Различия отражены в разделе Совместимость с браузерами, и текущее состояние обобщено ниже:
Браузеры Chromium:
- Для чтения требуется, чтобы было предоставлено разрешение API разрешений
clipboard-read. Временная активация не требуется. - Для записи требуется либо разрешение
clipboard-read, либо временная активация. Если разрешение предоставлено, оно сохраняется, и дополнительная временная активация не требуется. - Для элементов
<iframe>, которые обращаются к буферу обмена, должны быть разрешены разрешения HTTP Permissions-Policyclipboard-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 |
13398–133Принимает толькоBlob или Promise, разрешающую Blob в качестве данных элемента. |
13398–133Принимает толькоBlob или Promise, разрешающую Blob в качестве данных элемента. |
127 |
84Принимает толькоBlob или Promise, разрешающую Blob в качестве данных элемента. |
13.1 | 9884–98КонструкторClipboardItem принимает только blob в качестве данных элемента, но не строки или Promises, разрешающие строки или blobs. См. ошибку 40103226. |
127 | 6860–68КонструкторClipboardItem принимает только blob в качестве данных элемента, но не строки или Promises, разрешающие строки или blobs. См. ошибку 40103226. |
13.4 | 18.014.0–18.0КонструкторClipboardItem принимает только blob в качестве данных элемента, но не строки или Promises, разрешающие строки или blobs. См. ошибку 40103226. |
9884–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 загружаются только в браузере
См. также
© 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