Wie erkennt man Strg + V, Strg + C mit JavaScript?


Answers

Mit jQuery können Sie kopieren, einfügen, etc. leicht erkennen, indem Sie die Funktion binden:

$("#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!')
});

Weitere Informationen finden Sie hier: http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/

Question

Wie erkennt man Strg + V , Strg + C mit Javascript?

Ich muss das Einfügen in meine Textfelder einschränken, der Endbenutzer sollte den Inhalt nicht kopieren und einfügen, der Benutzer sollte nur Text in Textarea eingeben.

Wie erreiche ich das?




anstelle von onkeypress verwenden onkeydown.

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



Kurze Lösung, um zu verhindern, dass Benutzer das Kontextmenü verwenden, kopieren und in jQuery schneiden:

jQuery(document).bind("cut copy contextmenu",function(e){
    e.preventDefault();
});

Auch die Deaktivierung der Textauswahl in CSS könnte nützlich sein:

.noselect {  
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
     user-select: none;
}



function noCopyMouse(e) {
    if (event.button == 2 || event.button == 3) {
        alert('You are prompted to type this twice for a reason!');
        return false;
    }
    return true;
}

function noCopyKey(e) {
    var forbiddenKeys = new Array('c','x','v');
    var isCtrl;

        if(window.event) {
        if(window.event.ctrlKey)
            isCtrl = true;
        else
            isCtrl = false;
        }
        else {
                if(e.ctrlKey)
                    isCtrl = true;
                else
                    isCtrl = false;
        }

    if(isCtrl) {
        for(i=0; iif(forbiddenKeys[i] == String.fromCharCode(window.event.keyCode).toLowerCase()) {
                alert('You are prompted to type this twice for a reason!');
                return false;
            }
            }
    }
    return true;
}

Und jetzt, um die Methoden in den Textfeldern zu referenzieren, die Sie einschränken möchten:

<input name="txtTest" id="txtTest" type="textbox" onmousedown="javascript:return noCopyMouse(event);" onkeykown="javascript:return noCopyKey(event);"  />



Ein anderer Ansatz (kein Plugin erforderlich) ist es, nur die Eigenschaft ctrlKey des Ereignisobjekts zu verwenden , das übergeben wird. Es zeigt an, ob zum Zeitpunkt des Ereignisses die Strg- ctrlKey gedrückt wurde:

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

Siehe auch jquery: keypress, ctrl + c (oder eine ähnliche Combo) .




Vergessen Sie nicht, dass Sie, obwohl Sie möglicherweise Strg + C / V erkennen und blockieren können, den Wert eines bestimmten Feldes ändern können.
Bestes Beispiel dafür ist die Funktion "Element prüfen" von Chrome, mit der Sie die Werteigenschaft eines Feldes ändern können.




Es gibt eine andere Möglichkeit dies zu tun: onpaste , oncopy und oncut Events können in IE, Firefox, Chrome, Safari (mit einigen kleineren Problemen) registriert und abgebrochen werden, der einzige Hauptbrowser, der das Abbrechen dieser Events nicht zulässt, ist Opera.

Wie Sie in meiner anderen Antwort sehen können, enthält das Abfangen von Strg + v und Strg + c viele Nebeneffekte, und es hindert die Benutzer nicht daran, das Firefox-Menü Edit usw. einzufügen.

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 hat immer noch ein paar kleinere Probleme mit dieser Methode (es löscht die Zwischenablage an Stelle von Ausschneiden / Kopieren, wenn Standard verhindert wird), aber dieser Fehler scheint jetzt in Chrome behoben worden zu sein.

Siehe auch: http://www.quirksmode.org/dom/events/cutcopypaste.html und die zugehörige Testseite http://www.quirksmode.org/dom/events/tests/cutcopypaste.html für weitere Informationen.