Clipboard API
剪貼簿 API 提供了響應剪貼簿命令(剪下、複製和貼上)的能力,以及非同步地讀寫系統剪貼簿。
注意: 在訪問剪貼簿時,請優先使用此 API,而不是已棄用的 document.execCommand() 方法。
注意: 此 API 在 Web Workers 中不可用(未透過 WorkerNavigator 暴露)。
概念與用法
系統剪貼簿 是託管瀏覽器的作業系統的一個數據緩衝區,用於短期資料儲存和/或文件或應用程式之間的資料傳輸。它通常實現為一個匿名的、臨時的 資料緩衝區,有時也稱為貼上緩衝區,可以透過定義的程式設計介面從環境中的大多數或所有程式訪問。
剪貼簿 API 允許使用者在安全上下文中以程式設計方式讀寫系統剪貼簿中的文字和其他型別的資料,前提是使用者已滿足安全注意事項中概述的標準。
當剪貼簿因 cut、copy 和 paste 操作而修改時,會觸發事件。事件有預設操作,例如 `copy` 操作預設將當前選區複製到系統剪貼簿。事件處理程式可以覆蓋預設操作——有關更多資訊,請參閱每個事件。
介面
Clipboard安全上下文-
提供一個介面,用於向系統剪貼簿讀寫文字和資料。規範稱之為“非同步剪貼簿 API”。
ClipboardEventClipboardItem安全上下文-
表示單個專案格式,用於讀寫資料。
其他介面的擴充套件
剪貼簿 API 擴充套件了以下 API,並添加了列出的功能。
安全注意事項
剪貼簿 API 允許使用者在安全上下文中以程式設計方式讀寫系統剪貼簿中的文字和其他型別的資料。
從剪貼簿讀取時,規範要求使用者最近與頁面進行了互動(臨時使用者啟用),並且呼叫是在使用者與瀏覽器或作業系統“貼上元素”(例如在原生上下文選單中選擇“貼上”)互動的結果下進行的。實際上,瀏覽器通常允許不滿足這些要求的讀取操作,但會施加其他要求(例如許可權或每個操作的提示)。對於寫入剪貼簿,規範期望頁面已獲得 Permissions API 的 `clipboard-write` 許可權,並且瀏覽器也可能需要臨時使用者啟用。瀏覽器可能會對訪問剪貼簿的方法施加額外的限制。
瀏覽器實現已偏離規範。差異已在瀏覽器相容性部分捕獲,並且當前狀態總結如下:
Chromium 瀏覽器
- 如果規範不允許讀取,並且文件具有焦點,它會觸發一個請求使用 `clipboard-read` 許可權的請求,如果許可權被授予(無論是使用者接受了提示,還是許可權已預先授予),則讀取成功。
- 寫入操作需要 `clipboard-write` 許可權或臨時啟用。如果授予了許可權,則該許可權會持久化,並且不再需要臨時啟用。
- 對於訪問剪貼簿的
<iframe>元素,必須允許 HTTP Permissions-Policy 許可權 `clipboard-read` 和 `clipboard-write`。
Firefox 和 Safari
- 如果規範不允許讀取,但仍然滿足臨時使用者啟用,則會觸發一個臨時上下文選單形式的使用者提示,其中只有一個“貼上”選項(該選項在 1 秒後啟用),如果使用者選擇該選項,則讀取成功。
- 寫入操作需要臨時啟用。
- 如果讀取同源剪貼簿內容,則會抑制貼上提示,但不會抑制讀取跨域內容。
- Firefox 或 Safari 不支援(也不計劃支援)`clipboard-read` 和 `clipboard-write` 許可權。
Firefox Web 擴充套件
示例
訪問剪貼簿
系統剪貼簿透過 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 |
瀏覽器相容性
api.Clipboard
載入中…
api.ClipboardEvent
載入中…
api.ClipboardItem
載入中…