복붙노트

[JQUERY] 어떻게 자바 스크립트를 사용하여 Ctrl 키 + V, Ctrl + C를 감지?

JQUERY

어떻게 자바 스크립트를 사용하여 Ctrl 키 + V, Ctrl + C를 감지?

해결법


  1. 1.난 그냥 관심이 아웃했다. 나는 그것이 옳은 일이 아니다 동의하지만, 나는 또한 코드가 쉽게 기능을 추가하기보다는 고급 클립 보드처럼 (그것을 빼앗아, 또는 Ctrl + S 트리거링을 확장 할 수있는 연산의 결정 ...해야한다고 생각 서버 측)을 저장합니다.

    난 그냥 관심이 아웃했다. 나는 그것이 옳은 일이 아니다 동의하지만, 나는 또한 코드가 쉽게 기능을 추가하기보다는 고급 클립 보드처럼 (그것을 빼앗아, 또는 Ctrl + S 트리거링을 확장 할 수있는 연산의 결정 ...해야한다고 생각 서버 측)을 저장합니다.

    $ (문서) .ready (함수 () { VAR ctrlDown = 거짓, ctrlKey = 17 cmdKey = 91 V 키 = 86 cKey = 67; $ (문서) .keydown (기능 (전자) { 경우 (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = TRUE; }).의 keyup (함수 (E) { 경우 (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = 거짓; }); $ ( ". 노 복사 - 붙여 넣기").를 keyDown (기능 (전자) { (ctrlDown && (e.keyCode == V 키 || e.keyCode == cKey)) 반환 경우 false; }); // 문서 Ctrl + C / V $ (문서) .keydown (기능 (전자) { (ctrlDown && (e.keyCode == cKey)) CONSOLE.LOG ( "문서 캐치 Ctrl + C ')의 경우; (ctrlDown && (e.keyCode == V 키)) CONSOLE.LOG ( "문서 캐치 Ctrl 키 + V") 경우; }); }); <스크립트 SRC = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">

    Ctrl + C Ctrl + V를 비활성화 <텍스트 영역 클래스 = "아니오 복사 붙여 넣기">

    Ctrl + C + Ctrl 키의 허용 V <텍스트 영역>

    또한 단지 명확히하기 위해,이 스크립트는 jQuery 라이브러리가 필요합니다.

    Codepen 데모

    편집 : 팀 아래의 제안 덕분에 (주석 참조) (e.which을 포함)을 제거 3 개 중복 라인

    편집 : 맥에 대한 지원이 추가 (Ctrl 키 대신 cmd를 키)


  2. 2.당신은 쉽게 기능을 결합함으로써 등, 붙여 넣기, 복사를 감지 할 수 있습니다 jQuery로 :

    당신은 쉽게 기능을 결합함으로써 등, 붙여 넣기, 복사를 감지 할 수 있습니다 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/


  3. 3.불법 복제 방지 수단으로 사용하는 경우가 귀찮을 수 있지만, 나는 그렇게, 합법적 인 것 몇 가지 경우가있을 수 있습니다 볼 수 있습니다 :

    불법 복제 방지 수단으로 사용하는 경우가 귀찮을 수 있지만, 나는 그렇게, 합법적 인 것 몇 가지 경우가있을 수 있습니다 볼 수 있습니다 :

    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을 사용하는 것입니다, 그래서 나는 오히려 이벤트가 트리거되지 않습니다와 "최대", "아래로"맥 OS X Ctrl 키 / Alt 키에 대부분의 브라우저에서와 키 코드를 검사보다 event.ctrlKey을 사용했습니다 예 Ctrl 키 후 C 이벤트가 아래로 개최됩니다. 또한 맥에 대한 metaKey와 ctrlKey 교체했습니다.

    이 방법의 제한 사항 :


  4. 4.이 일을하는 또 다른 방법이있다 : onpaste, oncopy 및 이벤트에 등록하고 (약간의 문제) IE, 파이어 폭스, 크롬, 사파리에서 취소 할 수 있습니다 oncut, 이러한 이벤트를 취소하는 오페라이다 허용하지 않는 유일한 주요 브라우저.

    이 일을하는 또 다른 방법이있다 : onpaste, oncopy 및 이벤트에 등록하고 (약간의 문제) IE, 파이어 폭스, 크롬, 사파리에서 취소 할 수 있습니다 oncut, 이러한 이벤트를 취소하는 오페라이다 허용하지 않는 유일한 주요 브라우저.

    당신은 Ctrl 키 +의 V 및 차단 내 다른 대답에서 볼 수 있듯이 Ctrl 키 + C 많은 부작용이 함께 제공하고, 여전히 등 파이어 폭스 편집 메뉴를 사용하여 붙여 넣기에서 사용자를 방지하지 않습니다

    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
    }
    

    사파리는 여전히이 방법 몇 가지 사소한 문제가있다 (이 절단 대신에 클립 보드를 지 웁니다 / 기본을 방지 할 때 복사)하지만 버그가 지금 크롬에서 수정 된 것으로 보인다.

    자세한 내용은 http://www.quirksmode.org/dom/events/cutcopypaste.html 및 관련 테스트 페이지 http://www.quirksmode.org/dom/events/tests/cutcopypaste.html :도를 참조하십시오.


  5. 5.라이브 데모 : http://jsfiddle.net/abdennour/ba54W/

    라이브 데모 : 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!');
            }
        });
    
    }); 
    

  6. 6.jQuery를 짧은 상황에 맞는 메뉴를 사용하는 사용자를 방지하기위한 솔루션, 복사 및 잘라 내기 :

    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;
    }
    

  7. 7.당신은 ctrlKey 속성을 사용하는 경우에는 상태를 유지할 필요가 없습니다.

    당신은 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.
          } 
        }
    

  8. 8.나는 키 입력을 잡는다 jQuery 플러그인을 썼다. (글꼴 제외) OS없이 HTML 양식에서 여러 언어 스크립트 입력을 가능하게하는 데 사용할 수 있습니다. 코드의 그것의 약 300 라인은, 어쩌면 당신은 살펴 봤으면 :

    나는 키 입력을 잡는다 jQuery 플러그인을 썼다. (글꼴 제외) OS없이 HTML 양식에서 여러 언어 스크립트 입력을 가능하게하는 데 사용할 수 있습니다. 코드의 그것의 약 300 라인은, 어쩌면 당신은 살펴 봤으면 :

    일반적으로, 변경의 같은 종류의주의하십시오. 다른 솔루션을 사용할 수 있었기 때문에 나는 클라이언트에 대한 플러그인을 썼다.


  9. 9.당신은 오른쪽 클릭하면이 코드를 사용할 수 있습니다, CTRL + C, Ctrl + V, CTRL + X를 감지하고 방지 그들의 행동

    당신은 오른쪽 클릭하면이 코드를 사용할 수 있습니다, 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();
        });
    

  10. 10.대신 때 onKeyPress의, onKeyDown에 사용합니다.

    대신 때 onKeyPress의, onKeyDown에 사용합니다.

    <input type="text" onkeydown="if(event.ctrlKey && event.keyCode==86){return false;}" name="txt">
    

  11. 11.또 다른 방법은 (어떤이 필요한 플러그인이) 단지에 전달되는 이벤트 객체의 ctrlKey 속성을 사용하는 Ctrl 키를 다음과 같이 이벤트의 시간에 누를 경우를 나타냅니다. :

    또 다른 방법은 (어떤이 필요한 플러그인이) 단지에 전달되는 이벤트 객체의 ctrlKey 속성을 사용하는 Ctrl 키를 다음과 같이 이벤트의 시간에 누를 경우를 나타냅니다. :

    $(document).keypress("c",function(e) {
      if(e.ctrlKey)
        alert("Ctrl+C was pressed!!");
    });
    

    JQuery와 참조 : 키를 누를 때, Ctrl + C (또는 같은 몇 가지 콤보).


  12. 12.당신이 감지하고 Ctrl + C / V를 차단할 수있는 반면, 잊지 마세요, 당신은 여전히 ​​특정 필드의 값을 변경할 수 있습니다. 이에 대한 좋은 예는 이것이 당신이 필드의 값-속성을 변경할 수 있습니다, 크롬의이 요소의 기능을 검사합니다.

    당신이 감지하고 Ctrl + C / V를 차단할 수있는 반면, 잊지 마세요, 당신은 여전히 ​​특정 필드의 값을 변경할 수 있습니다. 이에 대한 좋은 예는 이것이 당신이 필드의 값-속성을 변경할 수 있습니다, 크롬의이 요소의 기능을 검사합니다.


  13. 13.난 이미 문제가 있고 난 단지 숫자를 받아 다음 코드 ..하여 해결

    난 이미 문제가 있고 난 단지 숫자를 받아 다음 코드 ..하여 해결

    $('#<%= 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;
                }
            });
    

    당신은 Ctrl 키 아이디 e.which == (17)를 감지 할 수 있습니다


  14. 14.복사 이벤트를 오버라이드 (override)를 허용하는 후크, 붙여 넣기 이벤트와 같은 일에 사용될 수 있습니다. 입력 요소는 표시하지 않을 수 없음; 또는 시정 : 숨겨진; 슬프게도

    복사 이벤트를 오버라이드 (override)를 허용하는 후크, 붙여 넣기 이벤트와 같은 일에 사용될 수 있습니다. 입력 요소는 표시하지 않을 수 없음; 또는 시정 : 숨겨진; 슬프게도

    export const useOverrideCopy = () => {
      const [copyListenerEl, setCopyListenerEl] = React.useState(
        null as HTMLInputElement | null
      )
      const [, setCopyHandler] = React.useState<(e: ClipboardEvent) => void | null>(
        () => () => {}
      )
      // appends a input element to the DOM, that will be focused.
      // when using copy/paste etc, it will target focused elements
      React.useEffect(() => {
        const el = document.createElement("input")  
        // cannot focus a element that is not "visible" aka cannot use display: none or visibility: hidden
        el.style.width = "0"
        el.style.height = "0"
        el.style.opacity = "0"
        el.style.position = "fixed"
        el.style.top = "-20px"
        document.body.appendChild(el)
        setCopyListenerEl(el)
        return () => {
          document.body.removeChild(el)
        }
      }, [])
      // adds a event listener for copying, and removes the old one 
      const overrideCopy = (newOverrideAction: () => any) => {
        setCopyHandler((prevCopyHandler: (e: ClipboardEvent) => void) => {
          const copyHandler = (e: ClipboardEvent) => {
            e.preventDefault()
            newOverrideAction()
          }
          copyListenerEl?.removeEventListener("copy", prevCopyHandler)
          copyListenerEl?.addEventListener("copy", copyHandler)
          copyListenerEl?.focus() // when focused, all copy events will trigger listener above
          return copyHandler
        })
      }
      return { overrideCopy }
    }
    

    다음과 같이 사용 :

    const customCopyEvent = () => {
        console.log("doing something")
    } 
    const { overrideCopy } = useOverrideCopy()
    overrideCopy(customCopyEvent)
    

    당신이 다시 집중 및 복사에 사용자 정의 이벤트를 호출합니다 overrideCopy 호출 할 때마다.


  15. 15.당신은 키 누름 이벤트를 수신하고,이 특정 키 코드를 일치하는 경우 (텍스트 입력) 기본 이벤트를 중지 할 수 있습니다

    당신은 키 누름 이벤트를 수신하고,이 특정 키 코드를 일치하는 경우 (텍스트 입력) 기본 이벤트를 중지 할 수 있습니다


  16. 16.반면, 아스키 코드, 나는 잠시 동안 e.keyCode을 사용하고 있었고, 난 내가 CTRL +을 누르면.,이 속성은 잘못된 번호 190를 반환 발견했습니다. (46)입니다!

    반면, 아스키 코드, 나는 잠시 동안 e.keyCode을 사용하고 있었고, 난 내가 CTRL +을 누르면.,이 속성은 잘못된 번호 190를 반환 발견했습니다. (46)입니다!

    대신 e.keyCode의 e.key.toUpperCase (). charCodeAt (0)를 사용한다 그래서.


  17. 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;});
    

    편집 : 팀 다운 말했다 방법이 기능은 모든 브라우저 부양이다.

  18. from https://stackoverflow.com/questions/2903991/how-to-detect-ctrlv-ctrlc-using-javascript by cc-by-sa and MIT license