ZeroClipboardでクリップボードを使う

(1/1)
ホームページにボタンを設け、テキストボックスの内容をクリップボードにコピーする――この処理が意外と面倒くさい。クリップボード処理がブラウザに依存するためだ。
そこで今回は、ZeroClipboardというJavaScriptライブラリを使い、ブラウザに依存しないクリップボード処理を実装する。IE9以上、Chrome、Firefox、Safariでの動作を確認した。
なお、ZeroClipboardはjQuery とFlashを利用する。

サンプル・プログラム

サンプル・プログラムは、「PHPでDOMDocumentを使ってスクレイピング」で作ったPHPスクリプトがベースになっている。スクレイピングした情報を、ボタンをクリックするとクリップボードへ取り込めるようになっている。
クリップボードにコピーできたら、ペースト(ctrl-V)をクリックすることで任意の場所へ貼り付けられる。

プログラムの解説:jQuery

  42: <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.js"></script>

jQueryGoogle Developers に登録されているものを利用する。

プログラムの解説:ZeroClipboardの準備

  43: <script src="http://www.pahoo.org/common/js/ZeroClipboard/ZeroClipboard.min.js"></script>

ZeroClipboard から圧縮ファイルをダウンロードしたら、解凍して得られる以下のファイルを任意のフォルダに配置する。その位置を上記のように指定する。swfファイルはJavaScriptファイルと同じフォルダにあれば、特に指定する必要はない。

プログラムの解説:ZeroClipboardの使い方

  44: <script type="text/javascript">
  45: $(document).ready(function() {
  46:     var clip_url         = new ZeroClipboard($("#copy_url"));
  47:     var clip_title       = new ZeroClipboard($("#copy_title"));
  48:     var clip_description = new ZeroClipboard($("#copy_description"));
  49: });
  50: </script>

 189: <body>
 190: <h2>{$title_2} {$version}</h2>
 191: <form name="myform" method="post" action="{$myself}" enctype="multipart/form-data">
 192: URL:
 193: <input type="text" name="url" id="url" size="50" value="{$url}" /> 
 194: <input type="submit" id="exec" name="exec" value="取得" /> 
 195: <input type="button" id="copy_url" name="copy_url" value="コピー" data-clipboard-target="url" />
 196: <hr style="text-align:left; margin-left:0; width:500px;"/>
 197: TITLE:
 198: <input type="text" name="title" id="title" size="50" value="{$title}" />
 199: <input type="button" id="copy_title" name="copy_title" value="コピー" data-clipboard-target="title" /><br /><br />
 200: DESCRIPTION:<br />
 201: <textarea id="description" name="description" rows="4" cols="65">{$description}</textarea><br />
 202: <input type="button" id="copy_description" name="copy_description" value="コピー" data-clipboard-target="description" />
 203: </form>

コピー・ボタンは3つ配置している。
それぞれZeroClipboard オブジェクトとして、冒頭に発生させている。引数はボタンの要素(ここではID)を指定する。

ここでは、コピー・ボタンをHTMLタグの '<input type="button />"' で作成する。他のHTMLタグにも対応している。
属性 data-clipboard-target により、コピー元の要素IDを指定する。

補足

ChromeやFirefoxでは、HTML5の Clipboard API が利用できる。
これを使う場合は、JavaScriptを以下のように変更する。

  42: <script type="text/javascript">
  43: document.addEventListener('DOMContentLoaded', function() {
  44:     document.getElementById('copy_url').addEventListener('click', function() {
  45:         var target = document.getElementById('url');
  46:         var range = document.createRange();
  47:         range.selectNode(target);
  48:         window.getSelection().addRange(range);
  49:         document.execCommand('copy');
  50:         window.getSelection().removeAllRanges(); 
  51:         range.detach();
  52:     });
  53:     document.getElementById('copy_title').addEventListener('click', function() {
  54:         var target = document.getElementById('title');
  55:         var range = document.createRange();
  56:         range.selectNode(target);
  57:         window.getSelection().addRange(range);
  58:         document.execCommand('copy');
  59:         window.getSelection().removeAllRanges(); 
  60:         range.detach();
  61:     });
  62:     document.getElementById('copy_description').addEventListener('click', function() {
  63:         var target = document.getElementById('description');
  64:         var range = document.createRange();
  65:         range.selectNode(target);
  66:         window.getSelection().addRange(range);
  67:         document.execCommand('copy');
  68:         window.getSelection().removeAllRanges(); 
  69:         range.detach();
  70:     });
  71: });
  72: </script>

参考サイト

(この項おわり)
header