[html] 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)
답변
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
.
이 방법의 한계 :
- Opera는 오른쪽 클릭 이벤트 비활성화를 허용하지 않습니다
- 내가 아는 한 브라우저 창의 드래그 앤 드롭을 방지 할 수 없습니다.
- Firefox 의
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.
}
}