attikottidetti
@attikottidetti

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Javascriptで、クリップボードに入っている文字列を抽出したい。

解決したいこと

Javascriptで、クリップボードに入っている文字列を抽出したい。

あるサイトで文字列をコピーしておき、自分のサイトのPHPに反映させようとしています。
その前提として、自分のサイトでJavascriptを起動するボタンを配置し、起動されるJavascriptの
プログラムを書きたいのですが、クリップボードの文字列を取得することができません。

該当するソースコード

    $("#clipboardkaiseki").click(function (e) {
    var clipboardData;

    clipboardData = e.clipboardData || window.clipboardData;
  console.log(clipboardData);
  console.log("in clipboardkaiseki");
});

発生している問題・エラー

undefined main.js:301:11
in clipboardkaiseki

試してみたこと

copyイベントが発生したときに、コピーされた内容を取得するサンプルがありましたが、
それは動きました。
ただ、別のサイトを開いて、そこでコピーした後、自分のサイトに戻ってJavascriptの
コードを実行させたいので、この方法は使えません。

よろしくお願いします。

0

1Answer

エラーの原因

clipboardDataに代入しているe.clipboardData, window.clipboardDataが両方undefinedになっています.

e.clipboardDataはボタンクリック時のイベントなので,クリックイベントです.
そのため,コピー時のClipboardEventと異なり,clipboardDataのプロパティは存在しません.
window.clipboardDataについてはIE用と思います.Chromeなど利用できないブラウザではundefinedとなります.

解決方法

navigator.clipboard.readText()を利用することで対応できます.(Chromeで動作確認しています.)

$('#clipboardkaiseki').click(() => {
  navigator.clipboard.readText()
    .then((clipboardData) => {
      console.log(clipboardData);
      console.log('in clipboardkaiseki');
    })
    .catch((err) => {
      console.log(err);
    });
});

以下の点にご注意ください.
- IE非対応(手元にIEがないので対応コードは準備できませんでした)
- localhost,または,httpsである必要がある
- セキュリティの制約上,ユーザに許可を求めるダイアログが表示される
- テキストのみ貼り付け可能

参考

1Like

Comments

  1. @attikottidetti

    Questioner

    ありがとうございます。お礼が遅れてすいませんでした。
    クロムでの動作を確認できました。
    ファイアフォックスでは、
    Uncaught TypeError: navigator.clipboard.readText is not a function
    <anonymous> https://xxxxxxxxxx.xsrv.jp/main.js?20210504084217:286
    jQuery 2
    と表示されてしまいました。
    ただ、クロムで実現できたというだけでも大きな前進です。
    この機能を必要とする人は、クロムで使ってくださいと言えばよいのですから。
    もう少しファイアフォックスの方は頑張ってみます。
    本当にありがとうございました。
  2. @attikottidetti

    Questioner

    参考で示していただいたものを見てみました。
    Clipboard.readText()の対応状況は、概ね以下のようになっているようでした。
    ありがとうございました。
    ○Chrome
    ○Edge
    △Firefox
    ×Internet Explorer
    ○Opera
    ○Safari

Your answer might help someone💌