• 投稿日 2022.03.05
  • 最終更新日 2023.03.22

広告・PRあり

[JS]ボタンをクリックしたらクリップボードにテキストをコピーする

[JS]ボタンをクリックしたらクリップボードにテキストをコピーする

こんにちは、むったん(@6ttan)です。

キャンペーンコードなどをコピーして別の場所にペーストする…なんてこと、たまにありますよね。
その際、ボタンをクリックしただでコピーできればとても便利!

逆に、該当部分を選択してコピーなんてさせられた際には「面倒くさい」と思っているユーザーもいるかもしれません。
少なくとも私はスマホ操作の際に、選択コピーの動作を求められると細かい作業でイラッとします。

今回はそんな私にも優しいクリップボードにテキストをコピーするJSについてご紹介します。

Document.execCommand()は非推奨

ことの発端は、某LPを某アプリに移管する際に気付きました。
この某LPもキャンペーンコードをコピペして、サービスサイトで投稿すると○○○もらえます!としていました。

LP内でコピーする分には問題なく、対象のテキストがペーストできていました。

しかし某アプリ上ではコピーができず、調べてみるとDocument.execCommand()は非推奨とのこと。

非推奨になったものをそのまま使うことはできないので、Clipboard API(Navigator.clipboard)を使用しました。
Navigator.clipboardIEのみ非対応なので、ご注意ください。

Navigator.clipboardを使用した

今回はテキストをコピー&ペーストしたいのでwriteText()メソッドで、クリップボードに書き込みます。

書き込む際は、渡されたテキストが正常にコピーできたかに応じて解決または拒否するPromiseを返すのでasync/awaitで実装できます。

コード(JavaScript)

let code = document.querySelector('.js-code');//コピー対象
let btn = document.querySelector('.js-btn');//クリップボードにコピーを実行するボタン

btn.addEventListener('click', function() {
  const textCode = code.textContent;
  copytoClipboarad(textCode);
});

async function copytoClipboarad(target) {
  try {
    await navigator.clipboard.writeText(target)
    alert('コピーできたよ!')
  } catch (error) {
    alert((error && error.message) || 'コピーに失敗しちゃった...')
  }
};

サンプル

codepenにサンプルを作成しましたので、動作を確認したい方はどうぞ。
ブログ上で動作確認すると権限関係で余計なコードを含むことになるので、リンク先で確認してください。

おわりに

移管作業などを行っていて、似たような事が今後もありそうだな…と思い、自分の備忘録をかねています。

また「なぜコピペできないのか」調べている時に、非推奨のexecCommand()を紹介している記事が結構ありましたので、ご注意ください。
情報の更新は大事だな…と常々。。。

About Me

むったん
フロントエンドエンジニア | webデザイナー | ブロガー

日々webサイト制作などを行っているフリーランスです。
ブログでは制作の備忘録からゲーム、愛犬トイについて書いています。
お仕事のご依頼はお問い合わせからお願いします。