Javascript를 사용하여 ctrl+ v, ctrl+ 를 감지하는 방법은 c무엇입니까?
텍스트 영역에 붙여 넣기를 제한해야하며 최종 사용자는 내용을 복사하여 붙여 넣어서는 안되고 사용자는 텍스트 영역에만 텍스트를 입력해야합니다.
이것을 달성하는 방법?
Javascript를 사용하여 ctrl+ v, ctrl+ 를 감지하는 방법은 c무엇입니까?
텍스트 영역에 붙여 넣기를 제한해야하며 최종 사용자는 내용을 복사하여 붙여 넣어서는 안되고 사용자는 텍스트 영역에만 텍스트를 입력해야합니다.
이것을 달성하는 방법?
답변:
방금 관심을 끌지 않았습니다. 나는 그것이 옳은 일이 아니다 동의하지만, 나는 또한 코드가 쉽게 기능을 추가하기보다는 고급 클립 보드처럼 (그것을 빼앗아, 또는 확장 할 수있는 연산의 결정 ...해야한다고 생각 Ctrl+ s서버를 트리거 사이드 저장).
$(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 라이브러리가 필요합니다.
편집 : Tim Down의 제안으로 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"down"및 "up"이벤트는 트리거되지 않으므로 대부분의 브라우저에서 키 코드를 확인 하는 대신 키 코드를 확인 하는 대신 키 를 사용한 event.ctrlKey
후 예를 들어 c 이벤트에서 감지하는 것이 유일한 방법 Ctrl입니다. 를 제지하다. 나는 또한 Mac을 대신 ctrlKey
했습니다 metaKey
.
이 방법의 한계 :
edit
-> copy
메뉴 항목은 여전히 복사 / 붙여 넣기를 허용 할 수 있습니다.:이 이렇게 또 다른 방법이있다 onpaste
, oncopy
그리고 oncut
이러한 이벤트를 취소하는 오페라이다 허용하지 않는 유일한 주요 브라우저, 이벤트 등록 (약간의 문제) IE, 파이어 폭스, 크롬, 사파리에서 취소 할 수 있습니다.
당신이 내 다른 대답에서 볼 수 있듯이 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!!");
});
jquery : keypress, ctrl + c (또는 이와 같은 콤보) 도 참조하십시오 .
나는 이미 문제가 있고 다음 코드로 해결했습니다 .. 숫자 만 허용합니다.
$('#<%= 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
이를 방지 할 수있는 몇 가지 방법이 있습니다.
그러나 사용자는 항상 자바 스크립트를 끄 거나 페이지의 소스 코드를 볼 수 있습니다.
몇 가지 예 (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 버전을 포함 하는 이벤트 가없는 브라우저에서는 작동하지 않습니다. 둘째, window.clipboardData
IE 전용이며 IE에서는 기본적으로 비활성화되어 있습니다 . 셋째, keydown
Ctrl 키를 누르는 모든 이벤트를 비활성화하는 것은 과도합니다. Ctrl-A (모두 선택) 및 Ctrl-Z (실행 취소)와 같은 유용한 키보드 단축키를 방지합니다. 넷째, 다른 사람들이 언급했듯이 이것은 정말 나쁜 일입니다.