blob: 2fc53c2dd4c6b3a9aa729e533dc8b8b9e7653db5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
---
title: Clipboard.read()
slug: Web/API/Clipboard/read
tags:
- API
- Clip
- Clipboard
- Clipboard API
- Editing
- Method
- Reference
- Scrap
- Text
- paste
- read
translation_of: Web/API/Clipboard/read
---
<div>{{APIRef("Clipboard API")}}</div>
<p><span class="seoSummary">{{domxref("Clipboard")}} インターフェイスの <strong><code>read()</code></strong> メソッドは、クリップボードの内容のコピーを要求し、戻り値の {{jsxref("Promise")}} が解決されたときにそのデータを取得できます。{{domxref("Clipboard.readText", "readText()")}} とは異なり、<code>read()</code> メソッドは画像など任意のデータを取得することができます。</span></p>
<p>クリップボードから読み込みを行うためには、まず <code>"clipboard-read"</code> パーミッションを取得する必要があります。</p>
<div class="note">
<p><strong>注意:</strong> 非同期の Clipboard API と <a href="/ja/docs/Web/API/Permissions_API">Permissions API</a> は、ほとんどのブラウザーでは組み込み途中の状態です。そのため、パーミッションなどが公式仕様とは異なっていることがよくあります。これらのメソッドを使う前に {{anch("Browser_compatibility", "ブラウザー実装状況")}} を確認してください。</p>
</div>
<h2 id="Syntax" name="Syntax">構文</h2>
<pre class="syntaxbox">var <em>promise</em> = navigator.clipboard.read();</pre>
<h3 id="Parameters" name="Parameters">パラメーター</h3>
<p>なし。</p>
<h3 id="Return_value" name="Return_value">戻り値</h3>
<p>クリップボードの内容を持つ {{domxref("DataTransfer")}} に解決される、{{jsxref("Promise")}} オブジェクト。クリップボードへのアクセスが許可されない場合、この Promise は拒否される。</p>
<h2 id="Example" name="Example">例</h2>
<p>この使用例は、最初に {{domxref("Permissions.query", "navigator.permissions.query()")}} を使って <code>"clipboard-read"</code> 権限があるかどうか (またはプロンプトによってユーザーがそれを許可するかどうか) を調べ、その後クリップボードに現在あるデータを取得します。もしデータがプレーンテキストでない場合、エラーメッセージを表示します。そうでない場合は、変数 <code>textElem</code> により参照している要素の内容を、クリップボードの内容に置き換えます。</p>
<pre class="brush: js">// まず、Permissions API を使って、
// "clipboard-read" 機能を使えるかどうか確認します。
navigator.permissions.query({name: "clipboard-read"}).then(result => {
// クリップボードの読み取りが許可されているか、またはプロンプトによって
// ユーザーがそれを許可する場合、処理を続行します。
if (result.state == "granted" || result.state == "prompt") {
navigator.clipboard.read().then(data => {
for (let i=0; i<data.items.length; i++) {
if (data.items[i].type != "text/plain") {
alert("クリップボードの内容がテキストでないため、読み込めません。");
} else {
textElem.innerText = data.items[i].getAs("text/plain");
}
}
});
}
});
</pre>
<div class="note">
<p><strong>注意:</strong> 現時点で Firefox は <code>read()</code> を実装していますが、<code>"clipboard-read"</code> パーミッションは認識できません。そのため、<a href="/ja/docs/Web/API/Permissions_API">Permissions API</a> を使ってこの API にアクセスしようとしても、失敗するでしょう。</p>
</div>
<div class="note">
<p><strong>日本語訳注:</strong> 翻訳時点 (2020/02/15) で、この使用例は Google Chrome (v80) でも実行できなくなっています。クリップボードから取得するデータの型が <code>DataTransfer</code> から <code><a href="https://www.w3.org/TR/clipboard-apis/#typedefdef-clipboarditems">ClipboardItems</a></code> に変更されるなど、仕様が変更されているためです。</p>
</div>
<h2 id="Specifications" name="Specifications">仕様</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">仕様書</th>
<th scope="col">策定状況</th>
<th scope="col">コメント</th>
</tr>
<tr>
<td>{{SpecName('Clipboard API','#dom-clipboard-read','read()')}}</td>
<td>{{Spec2('Clipboard API')}}</td>
<td>初回定義</td>
</tr>
</tbody>
</table>
<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2>
<p>{{Compat("api.Clipboard.read")}}</p>
|