Jak wykryć ctrl+ v, ctrl+ cużywając Javascript?
Muszę ograniczyć wklejanie w moich obszarach tekstowych, użytkownik końcowy nie powinien kopiować i wklejać treści, użytkownik powinien tylko wpisywać tekst w obszarze tekstowym.
Jak to osiągnąć?
javascript
jquery
html
Ramakrishnan
źródło
źródło
Odpowiedzi:
Zrobiłem to z zainteresowania. Zgadzam się, że to nie jest właściwe postępowanie, ale myślę, że powinna to być decyzja operatora ... Ponadto kod można łatwo rozszerzyć, aby dodać funkcjonalność, zamiast ją usuwać (jak bardziej zaawansowany schowek lub Ctrl+ swyzwalanie serwera -side save).
Również dla wyjaśnienia, ten skrypt wymaga biblioteki jQuery.
Codepen demo
EDYCJA: usunięto 3 zbędne wiersze (w tym np. Które) dzięki sugestii Tima Downa (patrz komentarze)
EDYCJA: dodano obsługę komputerów Mac ( cmdklawisz zamiast ctrl)
źródło
keydown
i jestkeyup
włączonadocument
? Możesz przetestować klawisz Ctrl w programie$(".no-copy-paste").keydown
obsługi. Ponadtoe.keyCode || e.which
bit nie jest potrzebny :e.keyCode
działa we wszystkich przeglądarkach, w któryche.which
działa, więce.which
nigdy nie będzie używany. Być może zastanawiałeś się, jak uzyskać kod postaci zkeypress
wydarzenia? Wreszcie, nie zrobi to nic z pastami z menu kontekstowego lub edycji, ale przypuszczam, że OP nie pytał o to bezpośrednio.e.metaKey
lube.ctrlKey
być,true
zamiast przypisywać wartości liczbowe do klawiszy i testować je.Za pomocą jquery możesz łatwo wykryć kopiowanie, wklejanie itp., Wiążąc funkcję:
Więcej informacji tutaj: http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/
źródło
Chociaż może to być denerwujące, gdy jest używane jako środek antypiracki, widzę, że mogą istnieć przypadki, w których byłoby to uzasadnione, więc:
Użyłem
event.ctrlKey
zamiast sprawdzać kodu klucza, ponieważ w większości przeglądarek w systemie Mac OS X Ctrl/ Altzdarzenia „w dół” i „w górę” nigdy nie są wyzwalane, więc jedynym sposobem wykrycia jest użycieevent.ctrlKey
np. Zdarzenia c po Ctrlkluczu przytrzymany. Ja również podstawionectrlKey
zmetaKey
dla Mac.Ograniczenia tej metody:
edit
->copy
element menu na przykład Firefox może nadal pozwalają kopiowania / wklejania.źródło
Jest jeszcze inny sposób w ten sposób:
onpaste
,oncopy
ioncut
zdarzenia mogą być rejestrowane i anulowane w IE, Firefox, Chrome, Safari (z pewnymi problemami drobnych), jedynym ważnym przeglądarka nie pozwala na anulowanie tych zdarzeń jest Opera.Jak widać w mojej drugiej odpowiedzi przechwytywanie Ctrl+ vi Ctrl+ cma wiele efektów ubocznych i nadal nie uniemożliwia użytkownikom wklejania za pomocą
Edit
menu Firefoksa itp.Safari nadal ma drobne problemy z tą metodą (czyści schowek zamiast wycinania / kopiowania, zapobiegając domyślnemu), ale wydaje się, że ten błąd został już naprawiony w Chrome.
Więcej informacji można znaleźć pod adresem : http://www.quirksmode.org/dom/events/cutcopypaste.html i na powiązanej stronie testowej http://www.quirksmode.org/dom/events/tests/cutcopypaste.html .
źródło
Demo na żywo: http://jsfiddle.net/abdennour/ba54W/
źródło
Krótkie rozwiązanie uniemożliwiające użytkownikowi korzystanie z menu kontekstowego, kopiowania i wycinania w jQuery:
Przydatne może być również wyłączenie zaznaczania tekstu w CSS:
źródło
Jeśli używasz tej
ctrlKey
właściwości, nie musisz utrzymywać stanu.źródło
Napisałem wtyczkę jQuery, która przechwytuje naciśnięcia klawiszy. Można go używać do włączania wprowadzania skryptów w wielu językach w formularzach HTML bez systemu operacyjnego (z wyjątkiem czcionek). To około 300 linii kodu, może chcesz rzucić okiem:
Generalnie uważaj na tego typu przeróbki. Napisałem wtyczkę dla klienta, ponieważ inne rozwiązania nie były dostępne.
źródło
Możesz użyć tego kodu do prawego kliknięcia, CTRL+ C, CTRL+ V, CTRL+ Xwykryć i zapobiec ich działaniu
źródło
zamiast onkeypress, użyj onkeydown.
źródło
Innym podejściem (bez wtyczki) jest po prostu użycie
ctrlKey
właściwości obiektu zdarzenia, który jest przekazywany. Wskazuje, czy Ctrlzostał naciśnięty w momencie zdarzenia, na przykład:Zobacz także jquery: keypress, ctrl + c (lub podobne combo) .
źródło
Nie zapominaj, że chociaż możesz być w stanie wykryć i zablokować Ctrl+ C/ V, nadal możesz zmienić wartość określonego pola.
Najlepszym tego przykładem jest funkcja Inspect Element w przeglądarce Chrome, która pozwala zmienić właściwość wartość pola.
źródło
mam już twój problem i rozwiązałem go za pomocą następującego kodu .. które akceptują tylko liczby
możesz wykryć Ctrlid
e.which == 17
źródło
Możesz słuchać zdarzenia naciśnięcia klawisza i zatrzymać domyślne zdarzenie (wprowadzanie tekstu), jeśli pasuje do określonych kodów klawiszy
źródło
Ważna uwaga
Używałem
e.keyCode
przez jakiś czas i wykryłem, że kiedy naciskam ctrl+ ., ten atrybut zwraca nieprawidłową liczbę, 190, podczas gdy kod ascii.
to 46!Więc powinieneś użyć
e.key.toUpperCase().charCodeAt(0)
zamiaste.keyCode
.źródło
Istnieje kilka sposobów, aby temu zapobiec.
Jednak użytkownik zawsze będzie mógł wyłączyć javascript lub po prostu spojrzeć na kod źródłowy strony.
Kilka przykładów (wymaga jQuery)
Edycja: jak powiedział Tim Down, wszystkie te funkcje zależą od przeglądarki.
źródło
paste
zdarzenia, które obejmuje wszystkie wersje Firefoksa starsze niż wersja 3. Po drugie,window.clipboardData
dotyczy tylko IE i uważam, że jest teraz domyślnie wyłączone w IE. . Po trzecie, wyłączanie wszystkichkeydown
zdarzeń, w których naciśnięty jest klawisz Ctrl, jest nadmierne: zapobiega się przydatnym skrótom klawiaturowym, takim jak Ctrl-A (zaznacz wszystko) i Ctrl-Z (cofnij). Po czwarte, jak wspominali inni, jest to naprawdę zła rzecz.