JavaScriptのcopyイベントについて書いています。
copyイベントを使うと、ユーザーがコピー操作をするときに処理を実行したり、コピーを禁止するなどの制御が可能になります。
下記について説明しています。
・copyイベントの設定方法
・copyイベントでコピーを禁止する
copyイベントとは?
copy
イベントは、ユーザーがテキストをコピーしたときに発生します。
このイベントを利用すると、コピーされた内容を変更したり、操作を無効にすることができます。
copyイベントを設定する
copy
イベントをつけるには、下記の2つの方法があります。
2. JavaScriptで`addEventListener`メソッドを使う
DOMの属性を使って設定する
oncopy
属性を使うことで、テキストをコピー時にcopy
イベントで処理をすることができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>oncopy サンプル</title>
</head>
<body>
<div id="textToCopy" oncopy="handleCopy(event)">
このテキストをコピーしてみてください。
</div>
<script>
function handleCopy(event) {
const selectText = document.getSelection();
alert("テキストをコピー:" + selectText);
}
</script>
</body>
</html>
HTMLの解説
コピー対象のテキストをいれたdiv
タグ(#textToCopy
)を用意しています。
このタグに対して、oncopy
属性を設定しています。
これで、タグ内のテキストがコピーされたときにイベントが発生します。
イベント発生時にoncopy
属性に設定したhandleCopy
関数が動作します。
JavaScriptの解説
handleCopy
関数では、最初に「document.getSelection()
」としてコピーしたテキストを取得しています。
その次の行で、コピーしたテキストをアラートで表示しました。
動作確認
動作を確認してみました。
カーソルでテキストを選択してコピーすると、下記のようにアラートが表示されました。
addEventListenerを使ってイベントを設定する
addEventListener
メソッドを使うことでも、copy
イベントを追加することができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>oncopy サンプル</title>
</head>
<body>
<div id="textToCopy">
このテキストをコピーしてみてください。
</div>
<script>
window.onload = () => {
const textToCopy = document.querySelector("#textToCopy");
textToCopy.addEventListener('copy', function() {
const selectText = document.getSelection();
alert("テキストをコピー:" + selectText);
});
}
</script>
</body>
</html>
HTMLの解説
先ほどと同じように、div
タグ(#textToCopy
)を用意しています。
今回はJavaScriptの方でイベントを設定するため、oncopy
を追加していません。
JavaScriptの解説
スクリプトの方では、最初にwindow.onload
を使って画面が読み込まれた時に処理をしています。
div
タグ(#textToCopy
)を取得して、取得した要素からaddEventListener
メソッドを呼び出しています。
第1引数の「copy
」がイベントで、第2引数がイベント発生時に実行される関数です。
処理としては先ほどと同様に、選択したテキストを取得してアラートで表示しています。
copyイベントでコピーを禁止する
copy
イベント発生時に、ブラウザのデフォルトの挙動をキャンセルすることで、コピーを禁止することが可能です。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>oncopy サンプル</title>
</head>
<body>
<div id="noCopy">
このテキストをコピーしてみてください。
</div>
<script>
window.onload = () => {
const noCopy = document.querySelector("#noCopy");
noCopy.addEventListener('copy', function(event) {
event.preventDefault();
alert("コピー禁止です!");
});
}
</script>
</body>
</html>
HTMLの解説
コピー対象のテキストを入れたdiv
タグ(#noCopy
)を用意しています。
この要素に対して、コピー操作を禁止します。
JavaScriptの解説
画面を読み込んだ時にイベントを設定しています。
div
タグ(#noCopy
)を取得して、addEventListener
メソッドでcopy
イベントを追加して処理しました。
受け取った引数のevent
変数から「event.preventDefault()
」とすることで、ブラウザのデフォルト動作をキャンセルして、テキストをコピーできなくしています。
動作確認
動作を確認すると、コピー時に下記のようにアラートがでてきます。
コピー操作した後に貼り付けようとしても、貼り付けれないことが確認できます。
終わりに
今回はJavaScriptのコピーイベントについて確認していきました。
まとめると、下記のようになります。
・oncopy属性かaddEventListenerメソッドを使うことで、イベントを追加することができた。
・イベント変数からpreventDefaultメソッドを呼ぶことで、コピー禁止できた。
コメント