2019年05月08日に初出の投稿

Last modified: 2019-05-08

クリックして文字(二倍幅ダッシュとか)の数値参照コードをクリップボードへ設定するようなボタンを実装するとして、これをオンラインで調べると、圧倒的に「選択したテキストのデータを送る」というユースケースしか想定されておらず、常に既存の要素を select して document.execCommand( "copy" ); することしか考えていない。これでは説明としては不十分だ。ボタンをクリックするだけで任意のテキストをクリップボードへ設定するような仕組みも説明するのが望ましく、たぶんコピペしか説明できない人というのは clipboardData.setData( "text/plain", "yourtext" ); つまりクリップボードの値を変更するということもクリップボードの操作であるという理解が足りないように思う。ちなみに clipboardData.setData() は、現在は殆ど使われていないし、ページの年度によっては IE でしか動かないと書かれている。また、navigator.clipboard.write(data) にデータを送る clipboardData.setData のようなメソッドについても、new DataTransfer() でデータを取得するなどと書いているのはデタラメである(illegal constructor のエラーが出るに決まってる)。

とまぁ、JavaScript で気軽に実装されてる UI をこき下ろして、自分のサイトでは可能な限り JavaScript を使わないと豪語してるような人間にすら「デタラメ」と断言されるような文書しか、実は JavaScript のユーザというのは解説できないのである。いかに世界中の JavaScript ユーザ の大半が、ただのコピペ野郎の集団であるかを物語っていると言ってよい。この一点だけでも、僕がふだんから非難しているのは JavaScript という言語ではなく、その利用者であるということがお分かりいただけるかと思う。そもそも「ツールに文句を言う」などという日本語が理解可能であるのは、それの開発者や利用者に対して言っているという共通理解があってこそであり、僕が本当に JavaScript というプログラミング言語やタイプされたコード、つまり概念や理屈やデータに向かって(物体が日本語を理解して返事したり反論することを僕が期待しているかのように)文句を言ってるなどと想像する人はいまい。こんなものは分析哲学の「カテゴリーミステイク」などと大袈裟に指摘する以前の問題である。

単純にクリップボードのデータを操作するというだけでも、実はブラウザ依存になってるのが現状だし、それどころか Firefox でフルサポートされている筈の navigator.clipboard.writeText( "your text" ); すら Quantum で全く動作しないわけで、まじめに扱ったら簡単に書けるような話題じゃない筈なんだよね。セキュリティ上も大きなリスクがある実装だし。既存の(あるいはコピーするだけのために挿入した)HTML 要素を選択してコピーしてクリップボードへ "©"(著作権マーク)を送るといった挙動は、はっきり言ってダサいので、button 要素をクリックするだけでクリップボードのデータを書き換えるということを考えていたのだけれど、確かに Ajax を組み合わせたらビジターのクリップボードのコンテンツを盗み放題なので、こんなもんをブラウザ側に組み込む方が危険だ。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook