জাভাস্ক্রিপ্ট ব্যবহার করে ctrl+ v, ctrl+ কীভাবে সনাক্ত করবেন c?
আমার টেক্সারিয়াসে আমার আটকানো সীমাবদ্ধ করা দরকার, শেষ ব্যবহারকারীর কন্টেন্টটি অনুলিপি করা ও আটকাতে হবে না, ব্যবহারকারীর কেবল টেক্সারেই পাঠ্য টাইপ করা উচিত।
কীভাবে এটি অর্জন করবেন?
জাভাস্ক্রিপ্ট ব্যবহার করে ctrl+ v, ctrl+ কীভাবে সনাক্ত করবেন c?
আমার টেক্সারিয়াসে আমার আটকানো সীমাবদ্ধ করা দরকার, শেষ ব্যবহারকারীর কন্টেন্টটি অনুলিপি করা ও আটকাতে হবে না, ব্যবহারকারীর কেবল টেক্সারেই পাঠ্য টাইপ করা উচিত।
কীভাবে এটি অর্জন করবেন?
উত্তর:
আমি কেবল আগ্রহের বাইরে এটি করেছি। আমি সম্মত এটা করতে ডান জিনিস না, কিন্তু আমি মনে করি এটা অপ সিদ্ধান্ত ... এছাড়াও কোড সহজে কার্যকারিতা যোগ করতে বদলে (এটা নিয়ে একটি আরো উন্নত ক্লিপবোর্ড মত, অথবা বাড়ানো হতে পারে হওয়া উচিত Ctrl+ + sএকটি সার্ভার triggering - পাশের সঞ্চয়)।
$(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>
এছাড়াও কেবল স্পষ্ট করতে, এই স্ক্রিপ্টটির জন্য jQuery লাইব্রেরি প্রয়োজন।
সম্পাদনা: টিম ডাউন এর পরামর্শ (মন্তব্য দেখুন) ধন্যবাদ 3 অপ্রয়োজনীয় লাইন সরানো (যেমন জড়িত)
সম্পাদনা: ম্যাকের জন্য সমর্থন যোগ করা ( cmdপরিবর্তে কী ctrl)
keydownএবং keyupহ্যান্ডলাররা চালু document? আপনি $(".no-copy-paste").keydownহ্যান্ডলারের মধ্যে Ctrl কী পরীক্ষা করতে পারেন । এছাড়াও, e.keyCode || e.whichবিটের কোনও প্রয়োজন নেই : e.keyCodeসমস্ত ব্রাউজারগুলিতে e.whichকাজ করে যা কাজ করে, তাই e.whichকখনও ব্যবহার করা হবে না। সম্ভবত আপনি কীভাবে কোনও keypressইভেন্টের একটি চরিত্র কোড পাবেন তা ভেবেছিলেন? পরিশেষে, এটি প্রসঙ্গ থেকে আটকানো বা মেনু সম্পাদনা সম্পর্কে কিছুই করবে না, তবে আমি মনে করি যে ওপি সরাসরি এ সম্পর্কে জিজ্ঞাসা করে না।
e.metaKeyবা e.ctrlKeyহওয়া ভাল probably true
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-behavier-with-jquery/
জলদস্যুতা বিরোধী ব্যবস্থা হিসাবে ব্যবহার করার সময় এটি বিরক্তিকর হতে পারে, তবে আমি দেখতে পাচ্ছি এটির বৈধতা রয়েছে এমন কিছু ঘটনা থাকতে পারে, তাই:
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ম্যাক ওএস এক্স Ctrl/ Alt"ডাউন" এবং "আপ" ইভেন্টগুলির বেশিরভাগ ব্রাউজারে কী কোডটি যাচাই করার পরিবর্তে ব্যবহার করেছি কখনই ট্রিগার করা হয় না, তাই সনাক্ত করার একমাত্র উপায় হল event.ctrlKeyসি'র পরে সি ইভেন্টে ব্যবহার করা Ctrlis নিচে অনুষ্ঠিত. আমিও প্রতিস্থাপিত করে থাকেন ctrlKeyসঙ্গে metaKeyMacs- এর জন্য।
এই পদ্ধতির সীমাবদ্ধতা:
edit-> copyউদাঃ ফায়ারফক্সে মেনু আইটেম এখনও কপি / পেস্ট অনুমতি দিতে পারেন।এই কাজ করার অন্য উপায় আছে: onpaste , oncopyএবংoncut একমাত্র প্রধান ব্রাউজার যা এই ঘটনা বাতিলের অপেরা হয় অনুমতি দেয় না ঘটনা নিবন্ধিত ও (কিছু ছোটখাট সমস্যা সহ) ইন্টারনেট, ফায়ারফক্স, ক্রোম, সাফারি বাতিল করা যায়।
আপনি দেখতে পাচ্ছেন যে আমার অন্য উত্তরে ইন্টারসেপ্টিং Ctrl+ vএবং Ctrl+ cঅনেকগুলি পার্শ্ব প্রতিক্রিয়া নিয়ে আসে এবং এটি এখনও ব্যবহারকারীদের ফায়ারফক্স Editমেনু ব্যবহার করে আটকাতে বাধা দেয় না etc.
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
}
সাফারিটিতে এখনও এই পদ্ধতিতে কিছুটা ছোটখাটো সমস্যা রয়েছে (এটি ডিফল্ট প্রতিরোধের সময় কাটা / অনুলিপিের জায়গায় ক্লিপবোর্ড সাফ করে) তবে Chrome এ এখন বাগটি ঠিক করা হয়েছে বলে মনে হয়।
আরও দেখুন: http://www.quirksmode.org/dom/events/cutcopypaste.html এবং সম্পর্কিত পরীক্ষার পৃষ্ঠা http://www.quirksmode.org/dom/events/tests/cutcopypaste.html আরও তথ্যের জন্য।
লাইভ ডেমো: 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!');
}
});
});
ব্যবহারকারীকে কনটেক্সট মেনু ব্যবহার করতে বাধা দেওয়ার জন্য সংক্ষিপ্ত সমাধান, জিকুয়েরিতে অনুলিপি এবং কাটা:
jQuery(document).bind("cut copy contextmenu",function(e){
e.preventDefault();
});
সিএসএসে পাঠ্য নির্বাচন অক্ষম করা কার্যকর হতে পারে:
.noselect {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
আপনি যদি 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.
}
}
আমি একটি jQuery প্লাগইন লিখেছি, যা কীস্ট্রোকগুলি ধরে cat ওএস ছাড়াই এইচটিএমএল আকারে একাধিক ভাষার স্ক্রিপ্ট ইনপুট সক্ষম করতে এটি ব্যবহার করা যেতে পারে (হরফগুলি বাদে)। এটি কোডের প্রায় 300 লাইন, সম্ভবত আপনি একবার দেখতে চান:
সাধারণত, এ জাতীয় পরিবর্তনগুলির সাথে সতর্কতা অবলম্বন করুন। আমি ক্লায়েন্টের জন্য প্লাগইন লিখেছিলাম কারণ অন্যান্য সমাধানগুলি উপলভ্য ছিল না।
আপনি এই কোডটি রাইটক্লিক, 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();
});
কেবলমাত্র পাস করা ইভেন্ট ইভেন্টটিরctrlKey সম্পত্তি ব্যবহার করার জন্য এটির অন্য পদ্ধতির (কোনও প্লাগইন প্রয়োজন নেই) এটি নির্দেশ করে যে ইভেন্টের সময় টিপে রাখা হয়েছিল কিনা, এটির মতো:Ctrl
$(document).keypress("c",function(e) {
if(e.ctrlKey)
alert("Ctrl+C was pressed!!");
});
এছাড়াও jquery দেখুন : কিপ্রেস, সিটিআরএল + সি (বা এর মতো কিছু কম্বো) ।
আমি ইতিমধ্যে আপনার সমস্যা আছে এবং আমি নিম্নলিখিত কোড দ্বারা এটি সমাধান করে .. যে শুধুমাত্র সংখ্যা গ্রহণ করে
$('#<%= 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
এটি রোধ করার কিছু উপায় রয়েছে।
তবে ব্যবহারকারী সর্বদা জাভাস্ক্রিপ্ট বন্ধ করতে বা কেবল পৃষ্ঠার উত্স কোডটি দেখতে সক্ষম হবে ।
কিছু উদাহরণ (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;});
সম্পাদনা: টিম ডাউন কীভাবে বলেছেন, এই ফাংশনগুলি সমস্ত ব্রাউজার নির্ভর ents
pasteযা কোনও ইভেন্ট নেই, যার মধ্যে ফায়ারফক্সের সমস্ত সংস্করণ version. এর পূর্বে অন্তর্ভুক্ত রয়েছে window.clipboardDataIE দ্বিতীয়ত, কেবলমাত্র আইআই এবং আমি বিশ্বাস করি এখন আইআই-তে ডিফল্টরূপে অক্ষম হয়ে গেছে believe । তৃতীয়ত, keydownযেখানে Ctrl কী টিপানো হয় সে সমস্ত ইভেন্ট অক্ষম করা অতিরিক্ত: আপনি দরকারী কীবোর্ড শর্টকাটগুলি যেমন Ctrl-A (সমস্ত নির্বাচন করুন) এবং Ctrl-Z (পূর্বাবস্থা) রোধ করেন। চতুর্থত, অন্যদের দ্বারা যেমনটি বলা হয়েছে, এটি করা সত্যিই খারাপ কাজ bad