ctrl+ v、ctrl+ cJavaScriptを使用して検出する方法は?
テキストエリアへの貼り付けを制限する必要があります。エンドユーザーはコンテンツをコピーして貼り付けないでください。ユーザーはテキストエリアにテキストを入力するだけです。
これを達成する方法は?
ctrl+ v、ctrl+ cJavaScriptを使用して検出する方法は?
テキストエリアへの貼り付けを制限する必要があります。エンドユーザーはコンテンツをコピーして貼り付けないでください。ユーザーはテキストエリアにテキストを入力するだけです。
これを達成する方法は?
回答:
興味がないのでこれをやった。私はそれが正しいことではないことに同意しますが、それは運用者の決定であると思います...また、コードを拡張して機能を追加するのではなく、簡単に拡張できます(より高度なクリップボードやCtrl+ sサーバーのトリガーなど) -side save)。
$(document).ready(function() {
var ctrlDown = false,
ctrlKey = 17,
cmdKey = 91,
vKey = 86,
cKey = 67;
$(document).keydown(function(e) {
if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = true;
}).keyup(function(e) {
if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = false;
});
$(".no-copy-paste").keydown(function(e) {
if (ctrlDown && (e.keyCode == vKey || e.keyCode == cKey)) return false;
});
// Document Ctrl + C/V
$(document).keydown(function(e) {
if (ctrlDown && (e.keyCode == cKey)) console.log("Document catch Ctrl+C");
if (ctrlDown && (e.keyCode == vKey)) console.log("Document catch Ctrl+V");
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>Ctrl+c Ctrl+v disabled</h3>
<textarea class="no-copy-paste"></textarea>
<br><br>
<h3>Ctrl+c Ctrl+v allowed</h3>
<textarea></textarea>
また、明確にするために、このスクリプトにはjQueryライブラリが必要です。
編集:ティムダウンの提案のおかげで(e.whichを含む)3つの冗長な行を削除しました(コメントを参照)
編集:Macのサポートを追加(のcmd代わりにキーctrl)
keydown
とのkeyup
ハンドラーはなぜdocument
ですか?$(".no-copy-paste").keydown
ハンドラーでCtrlキーをテストできます。また、e.keyCode || e.which
ビットは必要ありません。e.keyCode
動作するすべてのブラウザでe.which
動作するため、e.which
使用されることはありません。おそらく、keypress
イベントから文字コードを取得する方法を考えていましたか?最後に、これはコンテキストメニューや編集メニューからの貼り付けについては何もしませんが、OPはそれについて直接尋ねなかったと思います。
e.metaKey
か、テストする方が良いでしょう。e.ctrlKey
true
jqueryを使用すると、関数をバインドすることで、コピー、貼り付けなどを簡単に検出できます。
$("#textA").bind('copy', function() {
$('span').text('copy behaviour detected!')
});
$("#textA").bind('paste', function() {
$('span').text('paste behaviour detected!')
});
$("#textA").bind('cut', function() {
$('span').text('cut behaviour detected!')
});
詳細はこちら:http : //www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/
海賊行為対策として使用するのは面倒かもしれませんが、正当な場合があるかもしれませんので、
function disableCopyPaste(elm) {
// Disable cut/copy/paste key events
elm.onkeydown = interceptKeys
// Disable right click events
elm.oncontextmenu = function() {
return false
}
}
function interceptKeys(evt) {
evt = evt||window.event // IE support
var c = evt.keyCode
var ctrlDown = evt.ctrlKey||evt.metaKey // Mac support
// Check for Alt+Gr (http://en.wikipedia.org/wiki/AltGr_key)
if (ctrlDown && evt.altKey) return true
// Check for ctrl+c, v and x
else if (ctrlDown && c==67) return false // c
else if (ctrlDown && c==86) return false // v
else if (ctrlDown && c==88) return false // x
// Otherwise allow
return true
}
私が使ってきたevent.ctrlKey
というのMac OS X上のほとんどのブラウザ上のようにキーコードをチェックするよりもCtrl/ Altイベントがトリガされることはありません「UP」を検出する唯一の方法は使用することですので、「ダウン」とevent.ctrlKey
した後、例えば、CイベントにCtrlキーがあります押したまま。Mac でも代用ctrlKey
しmetaKey
ています。
このメソッドの制限:
edit
-> copy
メニュー項目でも、コピー/貼り付けを許可できます。そこにこれを行うための別の方法があります: onpaste
、oncopy
およびoncut
イベントは(いくつかのマイナーな問題を持つ)IE、Firefoxの、クロム、サファリに登録してキャンセルすることができ、これらのイベントをキャンセルすることはできません唯一の主要なブラウザはOperaのです。
他の回答でわかるように、Ctrl+ vとCtrl+のインターセプトにcは多くの副作用が伴いますが、それでもユーザーがFirefox Edit
メニューなどを使用して貼り付けることができます。
function disable_cutcopypaste(e) {
var fn = function(evt) {
// IE-specific lines
evt = evt||window.event
evt.returnValue = false
// Other browser support
if (evt.preventDefault)
evt.preventDefault()
return false
}
e.onbeforepaste = e.onbeforecopy = e.onbeforecut = fn
e.onpaste = e.oncopy = e.oncut = fn
}
Safariにはまだこの方法でいくつかのマイナーな問題があります(デフォルトを回避すると、切り取り/コピーの代わりにクリップボードがクリアされます)が、そのバグはChromeで修正されたようです。
詳細については、 http ://www.quirksmode.org/dom/events/cutcopypaste.htmlおよび関連するテストページhttp://www.quirksmode.org/dom/events/tests/cutcopypaste.htmlも参照してください。
ライブデモ:http : //jsfiddle.net/abdennour/ba54W/
$(document).ready(function() {
$("#textA").bind({
copy : function(){
$('span').text('copy behaviour detected!');
},
paste : function(){
$('span').text('paste behaviour detected!');
},
cut : function(){
$('span').text('cut behaviour detected!');
}
});
});
ユーザーがjQueryでコンテキストメニュー、コピー、カットを使用できないようにするための短いソリューション:
jQuery(document).bind("cut copy contextmenu",function(e){
e.preventDefault();
});
また、CSSでテキストの選択を無効にすると便利な場合があります。
.noselect {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
ctrlKey
プロパティを使用する場合、状態を維持する必要はありません。
$(document).keydown(function(event) {
// Ctrl+C or Cmd+C pressed?
if ((event.ctrlKey || event.metaKey) && event.keyCode == 67) {
// Do stuff.
}
// Ctrl+V or Cmd+V pressed?
if ((event.ctrlKey || event.metaKey) && event.keyCode == 86) {
// Do stuff.
}
// Ctrl+X or Cmd+X pressed?
if ((event.ctrlKey || event.metaKey) && event.keyCode == 88) {
// Do stuff.
}
}
キーストロークをキャッチするjQueryプラグインを作成しました。OSを使用せずにHTMLフォームで複数言語のスクリプト入力を有効にするために使用できます(フォントを除く)。約300行のコードです。たぶん、見てみたいと思います。
通常、このような変更には注意してください。他のソリューションが利用できなかったため、クライアント用のプラグインを作成しました。
このコードを使用して、右クリック、CTRL+ C、CTRL+ V、CTRL+をX検出し、それらのアクションを検出および防止できます。
$(document).bind('copy', function(e) {
alert('Copy is not allowed !!!');
e.preventDefault();
});
$(document).bind('paste', function() {
alert('Paste is not allowed !!!');
e.preventDefault();
});
$(document).bind('cut', function() {
alert('Cut is not allowed !!!');
e.preventDefault();
});
$(document).bind('contextmenu', function(e) {
alert('Right Click is not allowed !!!');
e.preventDefault();
});
別のアプローチ(プラグインは不要)で渡されるイベントオブジェクトのctrlKey
プロパティを使用するだけです。次のように、イベント時に押されたかどうかを示します。Ctrl
$(document).keypress("c",function(e) {
if(e.ctrlKey)
alert("Ctrl+C was pressed!!");
});
私はすでにあなたの問題を抱えており、私は次のコードでそれを解決しました..数字のみを受け入れる
$('#<%= mobileTextBox.ClientID %>').keydown(function(e) {
///// e.which Values
// 8 : BackSpace , 46 : Delete , 37 : Left , 39 : Rigth , 144: Num Lock
if (e.which != 8 && e.which != 46 && e.which != 37 && e.which != 39 && e.which != 144
&& (e.which < 96 || e.which > 105 )) {
return false;
}
});
あなたはCtrlID を検出することができますe.which == 17
それを防ぐ方法はいくつかあります。
ただし、ユーザーはいつでもJavaScriptをオフにしたり、ページのソースコードを確認したりできます。
いくつかの例(jQueryが必要)
/**
* Stop every keystroke with ctrl key pressed
*/
$(".textbox").keydown(function(){
if (event.ctrlKey==true) {
return false;
}
});
/**
* Clear all data of clipboard on focus
*/
$(".textbox").focus(function(){
if ( window.clipboardData ) {
window.clipboardData.setData('text','');
}
});
/**
* Block the paste event
*/
$(".textbox").bind('paste',function(e){return false;});
編集:Tim Downの発言によると、この機能はすべてブラウザに依存しています。
paste
目は、バージョン3より前のすべてのバージョンのFirefoxを含む、イベントのないブラウザーでは機能しません。2つ目は、window.clipboardData
IEのみで、IEではデフォルトで無効になっていると思います。 。3番目に、keydown
Ctrlキーが押されたすべてのイベントを無効にすることは過剰です。Ctrl-A(すべて選択)やCtrl-Z(元に戻す)などの便利なキーボードショートカットを使用できなくなります。第四に、他の人が述べたように、これは本当に悪いことです。