it-swarm.com.de

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

Wie erkennt man ctrl+vctrl+c mit Javascript?

Ich muss das Einfügen in meine Textbereiche einschränken. Der Endbenutzer sollte den Inhalt nicht kopieren und einfügen. Der Benutzer sollte nur Text in den Textbereich eingeben.

Wie kann man das erreichen?

153
Ramakrishnan

Ich habe das nur aus Interesse getan. Ich bin damit einverstanden, dass es nicht das Richtige ist, aber ich denke, es sollte die Entscheidung der Operation sein ... Auch der Code könnte leicht erweitert werden, um Funktionen hinzuzufügen, anstatt ihn zu entfernen (wie eine erweiterte Zwischenablage oder Ctrl+s Auslösen einer serverseitigen Speicherung).

$(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>

Ebenfalls nur zur Verdeutlichung benötigt dieses Skript die jQuery-Bibliothek.

Codepen-Demo

BEARBEITEN: Entfernt 3 redundante Zeilen (die e.which betreffen) dank Tim Downs Vorschlag (siehe Kommentare)

BEARBEITEN: Unterstützung für Macs hinzugefügt (Cmd-Taste anstelle von Strg)

168
jackocnr

Mit jquery können Sie leicht das Kopieren, Einfügen usw. 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/

50
Chris Andersson

Es kann zwar ärgerlich sein, wenn es als Maßnahme zur Pirateriebekämpfung eingesetzt wird, aber ich kann sehen, dass es einige Fälle gibt, in denen es legitim wäre.

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
}

Ich habe event.ctrlKey statt wie bei den meisten Browsern unter Mac OS X nach dem Schlüsselcode zu suchen Ctrl/Alt "down" - und "up" -Ereignisse werden niemals ausgelöst. Die einzige Möglichkeit zum Erkennen besteht in der Verwendung von event.ctrlKey in der z.B. c event nach dem Ctrl Taste gedrückt halten. Ich habe auch ctrlKey durch metaKey für Macs ersetzt.

Einschränkungen dieser Methode:

  • In Opera können Rechtsklick-Ereignisse nicht deaktiviert werden
  • Drag & Drop zwischen Browserfenstern kann meines Wissens nicht verhindert werden.
  • Der Menüpunkt edit-> copy in z. Firefox kann das Kopieren/Einfügen weiterhin zulassen.
  • Es gibt auch keine Garantie dafür, dass für Benutzer mit unterschiedlichen Tastaturlayouts/Gebietsschemas, die kopieren, einfügen oder ausschneiden, die gleichen Tastencodes verwendet werden (obwohl Layouts oft nur dem gleichen Standard wie in Englisch entsprechen). Die Option "Alle Steuertasten deaktivieren" bedeutet jedoch, dass alle ausgewählt werden, usw wird auch deaktiviert, also denke ich, das ist ein Kompromiss, der gemacht werden muss.
38
cryo

Es gibt eine andere Möglichkeit, dies zu tun: onpaste, oncopy und oncut Ereignisse können registriert und Abgebrochen in IE, Firefox, Chrome, Safari (mit einigen kleinen Problemen). Der einzige große Browser, der das Abbrechen dieser Ereignisse nicht zulässt, ist Opera.

Wie Sie in meiner anderen Antwort sehen können, fängt das ab Ctrl+v und Ctrl+c kommt mit vielen Nebenwirkungen, und es hindert Benutzer immer noch 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 einige kleinere Probleme mit dieser Methode (sie löscht die Zwischenablage anstelle von Ausschneiden/Kopieren, wenn sie die Standardeinstellung verhindert), aber dieser Fehler scheint in Chrome jetzt 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.

12
cryo

Live Demo: 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!');
        }
    });

}); 
9
Abdennour TOUMI

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

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

Auch das Deaktivieren der Textauswahl in CSS kann 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;
}
8
jendarybak

verwenden Sie statt onkeypress onkeydown.

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

Ich habe ein jQuery-Plugin geschrieben, das Tastatureingaben abfängt. Es kann verwendet werden, um mehrsprachige Skripteingaben in HTML-Formularen ohne das Betriebssystem (mit Ausnahme der Schriftarten) zu aktivieren. Es sind ungefähr 300 Codezeilen, vielleicht möchten Sie einen Blick darauf werfen:

Seien Sie im Allgemeinen vorsichtig mit solchen Änderungen. Ich habe das Plugin für einen Client geschrieben, weil andere Lösungen nicht verfügbar waren.

3
miku

Sie können diesen Code für Rechtsklick verwenden, CTRL+CCTRL+VCTRL+X erkennen und verhindern ihre Aktion

$(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();
    });
2
Varun Naharia

Ein anderer Ansatz (kein Plugin erforderlich) ist die Verwendung der ctrlKey -Eigenschaft des Ereignisobjekt , das übergeben wird. Er gibt an, ob Ctrl wurde zum Zeitpunkt der Veranstaltung wie folgt gedrückt:

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

Siehe auch Abfrage: Tastendruck, Strg + C (oder eine solche Kombination) .

1
Abu Ghufran

Wenn Sie die Eigenschaft ctrlKey verwenden, müssen Sie den Status nicht pflegen.

   $(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.
      } 
    }
0
Crashalot

ich habe bereits Ihr Problem und ich habe es durch den folgenden Code gelöst .. die nur Zahlen akzeptieren

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

sie können erkennen Ctrl Ich würde e.which == 17

0
Amr Badawy

Vergessen Sie das nicht, während Sie möglicherweise erkennen und blockieren können Ctrl+C/Vkönnen Sie den Wert eines bestimmten Feldes noch ändern.
Das beste Beispiel hierfür ist die Funktion "Elemente überprüfen" in Chrome, mit der Sie die Werteigenschaft eines Felds ändern können.

0
BlueCacti

Wichtige Notiz

Ich habe eine Zeit lang e.keyCode Verwendet und dies beim Drücken von festgestellt ctrl + ., Dieses Attribut gibt eine falsche Zahl (190) zurück, während der ASCII-Code von . 46 ist!

Sie sollten also e.key.toUpperCase().charCodeAt(0) anstelle von e.keyCode Verwenden.

0
Amir Forsati

Sie können das Tastendruckereignis abhören und das Standardereignis anhalten (indem Sie den Text eingeben), wenn es mit den spezifischen Tastencodes übereinstimmt

0
baloo