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() (en-US)
システムクリップボードに任意のデータを書き込みます。この非同期操作は、返された Promise が解決することにより、その操作が完了したことを示します。
writeText() (en-US)
システムクリップボードにテキストを書き込み、そのテキストがクリップボードに完全にコピーされたときに解決する Promise を返します。

クリップボードの可用性

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

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

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

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

仕様書

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

ブラウザー実装状況

BCD tables only load in the browser

関連情報