Как обнаружить ctrl+v, ctrl+c использование JavaScript?
Я должен ограничить вставку в своих текстовых областях, конечный пользователь не должен копировать и вставлять содержание, пользователь должен только ввести текст в текстовой области.
Как достигнуть этого?
Я сделал это просто из интереса. Я согласен, что это неправильно, но я думаю, что это должно быть решение оператора ... Также код можно легко расширить, чтобы добавить функциональность, а не убирать ее (например, более продвинутый буфер обмена или 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;}); // Документ 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");}); });
Ctrl + c Ctrl + v отключено
Ctrl + c Ctrl + v разрешено
Также для пояснения, для этого скрипта требуется библиотека jQuery.
РЕДАКТИРОВАТЬ: удалены 3 избыточные строки (включая e.which) благодаря предложению Тима Дауна (см. Комментарии)
РЕДАКТИРОВАТЬ: добавлена поддержка Mac (клавиша cmd вместо ctrl)
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;
}
А теперь ссылка на те методы в текстовых полях, которые вы хотите ограничить:
<input name="txtTest" id="txtTest" type="textbox" onmousedown="javascript:return noCopyMouse(event);" onkeykown="javascript:return noCopyKey(event);" />
Есть несколько способов предотвратить это.
Однако пользователь всегда сможет отключить javascript или просто посмотреть исходный код страницы.
Некоторые примеры (требуется 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;});
Изменить: Как сказал Тим Даун, все эти функции зависят от браузера.
Вы можете прослушать событие нажатия клавиши и остановить событие по умолчанию (ввод текста), если оно соответствует определенным кодам клавиш
Я написал плагин jQuery, который улавливает нажатия клавиш. Его можно использовать для включения многоязычного ввода скриптов в html-формах без ОС (кроме шрифтов). Это примерно 300 строк кода, может быть, вам захочется взглянуть:
В общем, будьте осторожны с такого рода изменениями. Я написал плагин для клиента, потому что других решений не было.
Хотя это может раздражать при использовании в качестве меры борьбы с пиратством, я вижу, что в некоторых случаях это было бы законно, поэтому:
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 , события «вниз» и «вверх» никогда не запускаются, поэтому единственный способ обнаружить используйте event.ctrlKey
в, например, c после нажатия клавиши Ctrl . Я также заменил ctrlKey
на metaKey
для Mac.
Ограничения этого метода:
редактировать
-> копировать
, например, в Firefox по-прежнему может разрешать копирование / вставку. у меня уже была ваша проблема и я решил ее следующим кодом ... который принимает только числа
$('#<%= 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 id e.which == 17
Есть другой способ сделать это: onpaste
, События oncopy
и oncut
могут быть зарегистрированы и отменены в IE, Firefox, Chrome, Safari (с некоторыми незначительными проблемами), единственным крупным браузером, который не позволяет отменять эти события, является Opera. .
Как вы можете видеть в моем другом ответе, перехват 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 для получения дополнительной информации.