[JS]ボタンをクリックしたらクリップボードにテキストをコピーする
こんにちは、むったん(@6ttan)です。
キャンペーンコードなどをコピーして別の場所にペーストする…なんてこと、たまにありますよね。
その際、ボタンをクリックしただでコピーできればとても便利!
逆に、該当部分を選択してコピーなんてさせられた際には「面倒くさい」と思っているユーザーもいるかもしれません。
少なくとも私はスマホ操作の際に、選択コピーの動作を求められると細かい作業でイラッとします。
今回はそんな私にも優しいクリップボードにテキストをコピーするJSについてご紹介します。
Contents close
Document.execCommand()は非推奨
ことの発端は、某LPを某アプリに移管する際に気付きました。
この某LPもキャンペーンコードをコピペして、サービスサイトで投稿すると○○○もらえます!としていました。
LP内でコピーする分には問題なく、対象のテキストがペーストできていました。
しかし某アプリ上ではコピーができず、調べてみるとDocument.execCommand()は非推奨とのこと。
非推奨になったものをそのまま使うことはできないので、Clipboard API(Navigator.clipboard)を使用しました。
Navigator.clipboardはIEのみ非対応なので、ご注意ください。
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()を紹介している記事が結構ありましたので、ご注意ください。
情報の更新は大事だな…と常々。。。