Clipboard

クリップボードとは、短期間のデータ格納や転送のために使われるバッファであり、文書やアプリケーションの間で使われます。
これは、通常名前のない一時的なバッファとして実装され、貼り付けバッファと呼ばれることもあり、その環境で定義されたアプリケーションプログラムインターフェイスを使うことで、ほとんど全てのプログラムがアクセスすることができます。

多くのアプリケーションでは、ショートカットキーメニューなど、このインターフェイスに結び付けられたユーザーからの入力を使うことにより、クリップボード機能にアクセスします。

Clipboard インターフェイスは Clipboard API を実装します。この API は、ユーザーが許可する場合、システムクリップボードの内容に対する読み取りと書き込みの両方を提供します。 Clipboard API は、ウェブアプリケーションにカット (切り取り)、コピー (複写)、ペースト (貼り付け) の機能を実装するために使うことができます。

システムクリップボードは、グローバルの Navigator.clipboard プロパティにより公開されています。

Clipboard オブジェクトのメソッド呼び出しは、ユーザーが Permissions API"clipboard-read""clipboard-write" パーミッションを適切に使って必要なパーミッションを与えていない場合、成功しません。

注意: 現実には、ブラウザーがクリップボードへアクセスする場合に必要となることは、非常に多岐に渡ります。詳細は クリップボードの可用性 を参照してください。

Clipboard API の全てのメソッドは非同期で動作します。つまり、それらはクリップボードにアクセスできたときに解決される Promise オブジェクトを返します。この Promise は、クリップボードへのアクセスが拒絶された場合には拒否されます。

メソッド

Clipboard は、EventTarget インターフェイスに基づいており、そのメソッドを含みます。

read()
クリップボードから任意のデータ (画像など) を要求し、{jsxref("Promise")}} を返します。データが取得されたとき、この Promise はそのデータを提供する DataTransfer オブジェクトにより解決されます。
readText()
システムクリップボードからテキストを要求します。利用可能になるとクリップボードのテキストを含む DOMString により解決される Promise を返します。
write()
システムクリップボードに任意のデータを書き込みます。この非同期操作は、返された Promise が解決することにより、その操作が完了したことを示します。
writeText()
システムクリップボードにテキストを書き込み、そのテキストがクリップボードに完全にコピーされたときに解決する Promise を返します。

クリップボードの可用性

非同期の Clipboard API は比較的最近追加されたものであり、ブラウザーへの実装プロセスはまだ完了していません。潜在的なセキュリティ懸念事項や技術的複雑さの両方により、ほとんどのブラウザーはこの API の統合を少しずつ行っています。

例えば、Firefox はまだ "clipboard-read""clipboard-write" パーミッションをサポートしていないため、これとは異なる方法でクリップボードの内容にアクセスし変更するメソッドへのアクセスを制限します。

WebExtension の場合、clipboardRead や clipboardWrite パーミッションを要求することで clipboard.readText() や clipboard.writeText() を使うことができます。ウェブサイトに適用されたコンテンツスクリプトは、Clipboard オブジェクトにアクセスすることはできません。Extensions in Firefox 63 を参照してください。

また、read()write() はデフォルトで無効にされており、これらを有効にするには設定を変更する必要があります。これらを使う前にブラウザー実装状況の表を確認してください。

仕様書

仕様書 状態 備考
Clipboard API and events
Clipboard の定義
草案 初回定義

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
ClipboardChrome 完全対応 66Edge 完全対応 79Firefox 完全対応 63IE 未対応 なしOpera 完全対応 53Safari 完全対応 13.1WebView Android 完全対応 66Chrome Android 完全対応 66Firefox Android 完全対応 63Opera Android 完全対応 47Safari iOS 完全対応 13.4Samsung Internet Android 完全対応 9.0
readChrome 部分対応 76
補足
部分対応 76
補足
補足 From version 76, the image/png MIME type is supported.
部分対応 66
補足
補足 Images are not supported.
Edge 完全対応 79Firefox 完全対応 63
補足 無効
完全対応 63
補足 無効
補足 Currently works just like readText(); non-text content is not currently supported.
無効 From version 63: this feature is behind the dom.events.asyncClipboard.dataTransfer preference (needs to be set to true). To change preferences in Firefox, visit about:config.
IE 未対応 なしOpera 完全対応 63Safari 完全対応 13.1WebView Android 部分対応 84
補足
部分対応 84
補足
補足 From version 84, the image/png MIME type is supported.
部分対応 66
補足
補足 Images are not supported.
Chrome Android 部分対応 84
補足
部分対応 84
補足
補足 From version 84, the image/png MIME type is supported.
部分対応 66
補足
補足 Images are not supported.
Firefox Android 完全対応 63
補足 無効
完全対応 63
補足 無効
補足 Currently works just like readText(); non-text content is not currently supported.
無効 From version 63: this feature is behind the dom.events.asyncClipboard.dataTransfer preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Opera Android 完全対応 54Safari iOS 完全対応 13.4Samsung Internet Android 完全対応 12.0
readTextChrome 完全対応 66Edge 完全対応 79Firefox 完全対応 63
補足
完全対応 63
補足
補足 Firefox only supports reading the clipboard in browser extensions, using the "clipboardRead" extension permission.
IE 未対応 なしOpera 完全対応 53Safari 完全対応 13.1WebView Android 完全対応 66Chrome Android 完全対応 66Firefox Android 完全対応 63
補足
完全対応 63
補足
補足 Firefox only supports reading the clipboard in browser extensions, using the "clipboardRead" extension permission.
Opera Android 完全対応 47Safari iOS 完全対応 13.4Samsung Internet Android 完全対応 9.0
writeChrome 完全対応 66
補足
完全対応 66
補足
補足 From version 76, the image/png MIME type is supported.
Edge 完全対応 79Firefox 完全対応 63
補足 無効
完全対応 63
補足 無効
補足 Currently works exactly like writeText(), including the availability limitations currently imposed by Firefox.
無効 From version 63: this feature is behind the dom.events.asyncClipboard.dataTransfer preference (needs to be set to true). To change preferences in Firefox, visit about:config.
IE 未対応 なしOpera 完全対応 63Safari 完全対応 13.1WebView Android 完全対応 66
補足
完全対応 66
補足
補足 From version 84, the image/png MIME type is supported.
Chrome Android 完全対応 66
補足
完全対応 66
補足
補足 From version 84, the image/png MIME type is supported.
Firefox Android 完全対応 63
補足 無効
完全対応 63
補足 無効
補足 Currently works exactly like writeText(), including the availability limitations currently imposed by Firefox.
無効 From version 63: this feature is behind the dom.events.asyncClipboard.dataTransfer preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Opera Android 完全対応 54Safari iOS 完全対応 13.4Samsung Internet Android 完全対応 12.0
writeTextChrome 完全対応 66Edge 完全対応 79Firefox 完全対応 63
補足
完全対応 63
補足
補足 Writing to the clipboard is available without permission in secure contexts and browser extensions, but only from user-initiated event callbacks. Browser extensions with the "clipboardWrite" permission can write to the clipboard at any time.
IE 未対応 なしOpera 完全対応 53Safari 完全対応 13.1WebView Android 完全対応 66Chrome Android 完全対応 66Firefox Android 完全対応 63
補足
完全対応 63
補足
補足 Writing to the clipboard is available without permission in secure contexts and browser extensions, but only from user-initiated event callbacks. Browser extensions with the "clipboardWrite" permission can write to the clipboard at any time.
Opera Android 完全対応 47Safari iOS 完全対応 13.4Samsung Internet Android 完全対応 9.0

凡例

完全対応  
完全対応
部分対応  
部分対応
未対応  
未対応
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連情報