現在のクリップボードのコンテンツを取得しますか?[閉まっている]


106

スクリプトを使用してクリップボードのコンテンツを検出し、ページを開いたときにユーザーの入力なしでテキストフィールドに貼り付ける方法を教えてください。どうすればできますか?


ユーザーがテキストをコピーするときに何らかのフラッシュバックエンドを使用しない限り、ユーザーのクリップボードが何であるかを実際に知ることはできません。------- 更新: ここでより正解
Naftali別名Neal



回答:


74

window.clipboardData.getData('Text')一部のブラウザで動作します。ただし、それが機能する多くのブラウザは、Webページにクリップボードへのアクセスを許可するかどうかをユーザーに尋ねます。


17
これはInternet Explorer以外のブラウザでも機能しますか?
アンダーソングリーン

6
おそらく違います。:この質問を参照してくださいstackoverflow.com/questions/400212/...
デイブ・

7
ここで互換性を確認できますcaniuse.com/#search=clipboardData
Sergey Novikov

1
より良い解決策は、ノードオブジェクトによるものですが、ウィンドウオブジェクトによるものではありません。ここを
rplaurindo

66

使用する新しいクリップボードAPIを経由して、navigator.clipboard。次のように使用できます。

navigator.clipboard.readText()
  .then(text => {
    console.log('Pasted content: ', text);
  })
  .catch(err => {
    console.error('Failed to read clipboard contents: ', err);
  });

または非同期構文で:

const text = await navigator.clipboard.readText();

これにより、ユーザーにアクセス許可要求ダイアログボックスが表示されるので、おかしなビジネスは不可能です。

(注:これはコンソールから呼び出された場合は機能しませんが、@ Arturのおかげでボタンを押すなどの直接的なユーザーアクションが必要になります)

それについてもっと

スペック


18
コンソールから呼び出されると、常にエラーが発生することに注意してください。しかし、ページ上のボタンを押すときのように、それ直接のユーザーアクションで機能します。
Klesun 2018

これは、リッチテキストがクリップボードにある場合でも、プレーンテキストのみを返すようです。どうすれば取得できますか?
Michael

@Michael、画像やその他のサポートが最後のChromeバージョン(76)に追加されました
iuliu.net

コンソールでテストするには、でラップしてsetTimeoutからページをクリックします。
edbentley

18

使用できます

window.clipboardData.getData('Text')

IEでユーザーのクリップボードのコンテンツを取得します。ただし、他のブラウザでは、クリップボードにアクセスするための標準インターフェイスがないため、コンテンツを取得するためにフラッシュを使用する必要がある場合があります。あなたはこのプラグインゼロクリップボードを試すことができるかもしれません


1
リンクは(再び)正常に動作しています
stephanos 2013年

5
ZeroClipboardあなただけがコピーできるようにする読んで、クリップボードではないから、それ。
DSimon 2015

4

以下は、選択したコンテンツとクリップボードの更新を提供します。

要素IDをコピーイベントにバインドし、選択したテキストを取得します。テキストを置換または変更できます。クリップボードを取得し、新しいテキストを設定します。正確なフォーマットを取得するには、タイプを「text / hmtl」に設定する必要があります。要素の代わりにドキュメントにバインドすることもできます。

      $(ElementId).bind('copy', function(event) {
        var selectedText = window.getSelection().toString(); 
        selectedText = selectedText.replace(/\u200B/g, "");

        clipboardData = event.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
        clipboardData.setData('text/html', selectedText);

        event.preventDefault();
      });

20
このサイトへようこそ!あなたが質問に答えて貢献してくれてうれしいです。しかし、あなたの答えは実際にはOPの質問に答えるものではないことに注意してください。問題は、クリップボードからコンテンツを取得し、ページを開くときにどこかに貼り付けることです。また、質問にはjqueryタグがないため、jQueryを使用した回答には、ライブラリ(jQuery)が使用されているという注記が含まれている必要があります。
KarelG 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.