JavaScript

【コピーされたくない】JavaScriptのイベントでコピー制御

一生懸命まとめたサイトの文章をコピペされたくない!

私が書いた記事内容と全く同じ内容と文章を見つけて悲しくなった。

今回は、このような経験や悩みを解決したい方に向けた内容の記事となります。

自分が一生懸命調べて書いた記事が、他のサイトにコピーされているのを見つけたとき、いわゆる「パクリ記事」を見つけてしまったら、「怒り」「悲しみ」の感情になってしまいます。

JavaScriptを使うことでコピーされないようにすることが可能になるため、「怒り」「悲しみ」の感情に悩まされなくなります。

今回は次の内容で話を進めていきます。

ここにタイトルを入力
  • 右クリックからのコピーを制御する
  • ショートカットキーからのコピーを制御する
  • 今回のサンプルコード

今回はJavaScriptの「イベント」を使った処理になるため、イベントとは何か詳しく知りたい方は次の記事で解説しているのでそちらを参照して頂けたらと思います。

あわせて読みたい
【基礎から学ぶ】JavaScriptのクリック【実例3パターン】
【基礎から学ぶ】JavaScriptのクリック【実例3パターン】Webのフロントエンド開発で動きのあるページを作る際には欠かせないイベント処理。その中でも今回は「クリック処理」に焦点を置いて、開発でよく使われる実例3パターンをサンプルコードを使って詳しく解説していきます。...

右クリックからのコピーを制御する

マウスの右クリックを制御するには「contextmenu」を使います。

JavaScriptのaddEventListenerを使って、「contextmenu」をイベントタイプとしてセットすることで、右クリック時にイベントが実行されます。

実際に「contextmenu」を使ってイベントを実行しているコードを使って見てみましょう。

たった3行のコードですが、これで右クリックを禁止させることが出来ます。

ここで注目していただきたいのは2行目の「event.preventDefault();」の部分です。

次に紹介する「ショートカットキーからのコピーを制御する」でも同じく「event.preventDefault();」を使うのですが、

event.preventDefault();」を使うと、行おうとしていた操作を中断することが出来ます。

今回の場合ですと、右クリックなので、「行おうとしていた操作」は次の画像のようなメニューを表示することになります。

右クリックした時に表示されるメニュー右クリックした時に表示されるメニュー

 

しかし、「event.preventDefault();」を使うことによってメニューの表示がされなくなる(表示が中断される)ため、結果として右クリックからのコピーができなくなります。

ショートカットキーからのコピーを制御する

次にショートカットキーを使ったコピーの制御のやり方を説明します。

ショートカットキーはキーボードを操作するので、キー操作ようのイベントである「keydown」「keyup」を使います。

右クリックのときの処理と比べると少し処理が複雑になるため、サンプルコードを交えながら解説していきます。

まず大まかな流れを説明します。

大まかな流れ
  1. 3行目: isDownCommand変数でコマンドを押しているかどうか状態を保持する
  2. 8行目: KEY_CODE_MAP変数で今回使う「コマンド(⌘)」と「C」のコンピュータ内部で判断するための値をセットする。(値はMDNのドキュメントから確認できます。)
  3. 14~27行目: キーボードを押したときの「keydown」イベントの処理を定義。条件によって①で定義した「isDownCommand」フラグをtrueにする。
  4. 30~35行目: キーボードを話した時の「keyup」イベントの処理を定義。条件によって①で定義した「isDownCommand」フラグをfalseにする

①と②で用意した値を利用して、③と④のイベント処理で条件分岐をうまく使って、コピーの制御を行います。

③のコードを詳しく説明すると、まず初めてコマンド(⌘)キーが押されたら16行目の条件が「true」となり、「isDownCommand」フラグがtrueとなります。

「isDownCommand」フラグがtrueの状態で「C」キーが押されたとき、24行目の「event.preventDefault();」が実行されて、「行おうとしていた操作」していた操作が中断されます。

今回の場合「行おうとしていた操作」は、「⌘+c」のためコピーのショートカットキーとなります。

結果、「event.preventDefault();」によってコピーが中断されるためコピーが出来なくなるのです。

「isDownCommand」フラグがコマンド(⌘)キーを離したときも「true」になっていると、「C」キーのみを押した場合でも、24行目の「event.preventDefault();」が実行されます。

これは意図しない処理であるため、コマンド(⌘)キーを離したら「isDownCommand」フラグをリセットしなければいけません。

そのため④でコマンド(⌘)キーを離したとき、33行目で「isDownCommand」フラグを「false」にしてリセットしています。

今回のサンプルコード

今回使ったHTMLとJavaScriptのコードは次のとおりです。

サンプルコードの挙動は次の画像のようになります。

サンプルコードの挙動確認サンプルコードの挙動確認

 

まとめ

今回は、JavaScriptを使ってWebページに訪れたユーザーにコピーをさせないための方法を解説しました。

JavaScriptでコピーを制御する方法は大きく分けて以下の2つになります。

ユーザーのコピー方法
  1. 右クリックしてからコピーを行う
  2. ショートカットキーを使ってコピーを行う

上記2つをJavaScriptのイベント処理で「event.preventDefault」を使うことで中断させることが出来ることを説明しました。

今回はMacによるコピー制御を行いましたが、Windowsでも基本的には同じで、コマンド(⌘)の値の代わりにコントロールキーの値も利用すれば、MacとWindows両方に対応できます。

自分の記事が勝手に使われて困っている方は、JavaScriptサンプルコードの8~55行目をコピーして使って頂けたらと思います。

使い方がわからない方、お気軽にご連絡頂けたらと思います^^

あわせて読みたい
【絶賛受付中】プログラミング・Webの相談お気軽にどうぞ!
【絶賛受付中】プログラミング・Webの相談お気軽にどうぞ!プログラミングやWebで困っていることに対して何でも質問受け付けています。「こんなこと質問しても大丈夫かな」と思っている方のために過去にどんな質問があったのか一例で挙げているので参考にしていただけたらと思います。...
【3つの特典付き】Webエンジニアに必要な基礎スキルを体系的に効率良く身につけたいですか?

LINE登録で無料特典を受け取る

次のような方向けに、学習をサポートするコンテンツを無料プレゼントしています。

  • Webエンジニアになりたいけど何から学習を始めれば良いかわからない
  • 今まで独学で頑張ってきたけど、独学に限界を感じてきた
  • プログラミングは出来るけど、大きめのコードが書けない

「プレゼント詳細が知りたい」「プレゼントを受け取りたい」といった方は、以下のボタンをクリックして詳細ページをご確認ください。

無料特典を受け取る

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です