簡単な JavaScript で HTML の表示要素をクリップボードにコピーする(iPhone 対応、脱 JQuery)

簡単な JavaScript で HTML の表示要素をクリップボードにコピーする(iPhone 対応、脱 JQuery)

例えばプロダクトキーや API キーなど、長くて複雑な文字列を、訪問者に提供している場合、この機能を提供することで、訪問者のクリップボードに文字列をコピーして、その後はペーストだけすればよい、という形で利便性を高めることができます。

JavaScript で記述していますので、脱 JQuery / 非 JQuery を望まれる方にもご利用いただけます。

HTML
<p id="campaign-code">VjBpRLpQkr5GniGG7J5PxUa7CXmZKuzD</p>
<p><a href="javascript:void(0);" onclick="javascript:clipboard();" style="cursor: pointer;"><i class="fa fa-clipboard" aria-hidden="true"></i> <span id="clipboard-info">コードをクリップボードにコピーする</span></a></p>
JavaScript
 <script>
 function clipboard(){
   var text = document.getElementById('campaign-code').innerText;
   navigator.clipboard.writeText(text).then(e => {
     document.getElementById("clipboard-info").innerText = "コピーしました.";
   });
 }
 </script>
サンプル

VjBpRLpQkr5GniGG7J5PxUa7CXmZKuzD

コードをクリップボードにコピーする

2021年9月更新:

従来までは a タグの箇所を <a href=”javascript:clipboard();”> と記述していましたが、これだと Chrome などのエミュレーションでは正しく挙動するのですが、iPhone の実機だと動かないという謎現象に遭遇していました。

いろいろ調べた結果、iPhone 環境ではクリックの処理でいろいろと問題があるらしく、いろいろ特殊なことをしないといけないらしく、結果としては、まず a タグに style=”cursor: pointer;” のスタイルを追加、 a の href 自体には false の戻り値を返す式を、そして新たに onclick= を追加して、そこにクリップボードにコピーをするプログラムを入れたところ、想定通りの挙動になりました。