কীভাবে জাভাস্ক্রিপ্ট ব্যবহার করে Ctrl + V, Ctrl + C সনাক্ত করবেন?


173

জাভাস্ক্রিপ্ট ব্যবহার করে ctrl+ v, ctrl+ কীভাবে সনাক্ত করবেন c?

আমার টেক্সারিয়াসে আমার আটকানো সীমাবদ্ধ করা দরকার, শেষ ব্যবহারকারীর কন্টেন্টটি অনুলিপি করা ও আটকাতে হবে না, ব্যবহারকারীর কেবল টেক্সারেই পাঠ্য টাইপ করা উচিত।

কীভাবে এটি অর্জন করবেন?


3
এটার উদ্দেশ্য কি? কেবলমাত্র দুটি বৈধ পরিস্থিতি যা আমি ভাবতে পারি তা হ'ল পাসওয়ার্ড ক্ষেত্র (যা আপনি যাইহোক অনুলিপি করতে পারবেন না) এবং একটি টাইপিং গতির পরীক্ষা। আমি নিশ্চিত আপনি সন্দেহজনকভাবে দ্রুত টাইপিং সনাক্ত করতে পারবেন।
পল কসাই

9
@ পল কসাই, @ প্রোপেনগ: এমন দৃশ্য আছে যেখানে আপনার এটি প্রয়োজন। খুব সাধারণ উদাহরণ: বিদেশী ভাষা শেখার জন্য একটি সাইট। আপনি যদি অনুলিপি এবং পেস্ট ব্যবহার না করে হাত দিয়ে শব্দগুলি টাইপ করেন তবে শেখার প্রভাবটি বাড়ানো হয়েছে।
back2dos

2
অন্য বৈধ পরিস্থিতি হতে পারে যেখানে ভুলগুলি সনাক্ত করতে ডাবল প্রবেশের প্রয়োজন হয় (উদাহরণস্বরূপ আপনার ইমেলটি দু'বার টাইপ করুন, যাতে আমরা জানতে পারি যে এটিতে কোনও টাইপ পাওয়া যায় নি)। তবুও, এই জাতীয় ব্যবহারকারী এলোমেলোভাবে উত্পাদিত ইমেল ঠিকানাগুলির একটি তালিকা রাখতে পারে (উদাঃ স্নেকমেইল) এবং সম্ভবত এটি নির্ভুলতার জন্য পেস্ট করতে চাইবে।
পল কসাই

40
@ পল বাচার - এটি মোটামুটি বৈধ পরিস্থিতি নয়, আমি এমন সাইটগুলিকে ঘৃণা করি যেগুলি এটি করে এবং আমি সর্বদা আমার (দীর্ঘ) ইমেল ঠিকানাটি একটি ইনপুট থেকে অন্য ইনপুট থেকে অনুলিপি / পেস্ট করি। কপি / পেস্ট ভাঙ্গা একটি বড় ব্যবহারের সমস্যা। এটি ব্যবহারকারীকে সত্যিই ছুঁড়ে ফেলেছে, কারণ এটি তাদের মানসিক মডেলের এতটাই মৌলিক যে তারা এটি "কেবলমাত্র কাজ" করার প্রত্যাশা করে। এটি যেন আপনি কোনও দরজা টানতে চেষ্টা করেছিলেন এবং এটি আপনার দিকে না গিয়ে আপনার থেকে দূরে সরে গেছে!
EMP

4
যখনই এই জাতীয় অনুলিপিটি কোনও পৃষ্ঠায় আটকানো যায় না, তখন আমি যা করি তা হ'ল পাঠ্যটি অন্য কোথাও আটকে দিন (আমি ইউআরএল বারটি ব্যবহার করি) এবং তারপরে Ctrl + A (কেবলমাত্র ইউআরএলটিতে আটকানো পাঠ্যটি নির্বাচন করুন), টেনে আনুন এবং ফেলে দিন ব্রাউজে ক্ষেত্র, যেখানে পেস্ট অক্ষম করা আছে। আমার ধারণা, এটি আজকের মতো প্রতিরোধযোগ্য নয়।
জানকীরাম

উত্তর:


180

আমি কেবল আগ্রহের বাইরে এটি করেছি। আমি সম্মত এটা করতে ডান জিনিস না, কিন্তু আমি মনে করি এটা অপ সিদ্ধান্ত ... এছাড়াও কোড সহজে কার্যকারিতা যোগ করতে বদলে (এটা নিয়ে একটি আরো উন্নত ক্লিপবোর্ড মত, অথবা বাড়ানো হতে পারে হওয়া উচিত 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)


4
কেন keydownএবং keyupহ্যান্ডলাররা চালু document? আপনি $(".no-copy-paste").keydownহ্যান্ডলারের মধ্যে Ctrl কী পরীক্ষা করতে পারেন । এছাড়াও, e.keyCode || e.whichবিটের কোনও প্রয়োজন নেই : e.keyCodeসমস্ত ব্রাউজারগুলিতে e.whichকাজ করে যা কাজ করে, তাই e.whichকখনও ব্যবহার করা হবে না। সম্ভবত আপনি কীভাবে কোনও keypressইভেন্টের একটি চরিত্র কোড পাবেন তা ভেবেছিলেন? পরিশেষে, এটি প্রসঙ্গ থেকে আটকানো বা মেনু সম্পাদনা সম্পর্কে কিছুই করবে না, তবে আমি মনে করি যে ওপি সরাসরি এ সম্পর্কে জিজ্ঞাসা করে না।
টিম ডাউন

@ টিম: ডকুমেন্টে সিআরটিএল কী হ্যান্ডলারগুলি সাধারণ হতে পারে - কারণ তারা চাইবে না যে সিটিআরএলডাউন ভেরিয়েবলটি কেবল কোনও অনুলিপি-পেস্ট ইনপুট (গুলি) এর সাথে সংযুক্ত করা উচিত। এটি সম্ভবত ওটিটি। E.Wich টিপটির জন্য ধন্যবাদ - আমি তখন থেকে e.keyCode এবং e.With কীডাউন () এবং কীপ্রেস () এর সাথে বিভিন্ন ব্যবহারের ক্ষেত্রে গবেষণা করে আধ ঘন্টা ব্যয় করেছি এবং কি গোলমাল (বিশেষত ফায়ারফক্সে)!
jackocnr

1
জ্যাকোকনার: আমি জ্যান ওল্টারের জাভাস্ক্রিপ্ট কী হ্যান্ডলিং নিবন্ধটি প্রস্তাব করছি : unixpapa.com/js/key.html আমি এটি বহুবার রেফারেন্সের জন্য ব্যবহার করেছি এবং একটি ত্রুটি খুঁজে পাইনি।
টিম ডাউন

3
শহরবাসী! ধন্যবাদ! আমি লিখছি এমন একটি ওয়েব অ্যাপ্লিকেশনটিতে একটি "উপাদান" (ক্যালেন্ডার এন্ট্রি) নির্বাচন করতে ব্যবহারকারীদের সক্ষম করার জন্য আমার ঠিক এটি দরকার ছিল, এটি "অনুলিপি" করতে ctrl + c টিপুন, তারপরে ctrl + v এটিকে "পেস্ট" করতে পারেন, সব ছাড়াই আসলে সর্বশক্তিমান আশীর্বাদযুক্ত ক্লিপবোর্ডের সাথে আলাপচারিতা। ctrl + c আমি মনে করি তারা কী ক্লিক করেছে, ctrl + v আমি এটির নকল করি, প্রত্যেকে জয়ী হয়।
ড্যান এফ

2
আমি কোনও বিশেষজ্ঞ বা অন্য কিছু নই, তবে আমি মনে করি কীগুলির জন্য সংখ্যা মান নির্ধারণ করে পরীক্ষা করার পরিবর্তে এটি পরীক্ষা করা e.metaKeyবা e.ctrlKeyহওয়া ভাল probably true
sluther

52

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/


1
দুর্ভাগ্যক্রমে, পাঠ্যটি নির্বাচিত হলে এই পদ্ধতিটি কেবল ফায়ারফক্সে জ্বালিয়ে দেবে
ইয়াসির এন্নাজক

44

জলদস্যুতা বিরোধী ব্যবস্থা হিসাবে ব্যবহার করার সময় এটি বিরক্তিকর হতে পারে, তবে আমি দেখতে পাচ্ছি এটির বৈধতা রয়েছে এমন কিছু ঘটনা থাকতে পারে, তাই:

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উদাঃ ফায়ারফক্সে মেনু আইটেম এখনও কপি / পেস্ট অনুমতি দিতে পারেন।

  • এর কোনও গ্যারান্টি নেই যে বিভিন্ন কীবোর্ড লেআউট / লোকেলগুলি যা অনুলিপি / পেস্ট / কাট করে একই কী কোডগুলি (যদিও লেআউটগুলি প্রায়শই কেবল ইংরেজির মতো একই মান অনুসরণ করে), তবে কম্বলটি "সমস্ত নিয়ন্ত্রণ কী অক্ষম করে" মানে এই সমস্ত নির্বাচন করুন ইত্যাদি etc এছাড়াও অক্ষম হবে তাই আমি মনে করি এটি একটি আপস যা দরকার be

14

এই কাজ করার অন্য উপায় আছে: 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 আরও তথ্যের জন্য।



8

ব্যবহারকারীকে কনটেক্সট মেনু ব্যবহার করতে বাধা দেওয়ার জন্য সংক্ষিপ্ত সমাধান, জিকুয়েরিতে অনুলিপি এবং কাটা:

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;
}

4

আপনি যদি 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.
      } 
    }

এটা সঠিক উত্তর! ইভেন্টটির একটি বৈশিষ্ট্য রয়েছে ctrlKey = সত্য যদি এটির সাথে একটি কী চাপানো হয়। আমাদের কোনও অতিরিক্ত ইভেন্টের দরকার নেই।
জানবারুস

3

আমি একটি jQuery প্লাগইন লিখেছি, যা কীস্ট্রোকগুলি ধরে cat ওএস ছাড়াই এইচটিএমএল আকারে একাধিক ভাষার স্ক্রিপ্ট ইনপুট সক্ষম করতে এটি ব্যবহার করা যেতে পারে (হরফগুলি বাদে)। এটি কোডের প্রায় 300 লাইন, সম্ভবত আপনি একবার দেখতে চান:

সাধারণত, এ জাতীয় পরিবর্তনগুলির সাথে সতর্কতা অবলম্বন করুন। আমি ক্লায়েন্টের জন্য প্লাগইন লিখেছিলাম কারণ অন্যান্য সমাধানগুলি উপলভ্য ছিল না।


3

আপনি এই কোডটি রাইটক্লিক, 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();
    });

3

onkeypress পরিবর্তে, onkeydown ব্যবহার করুন।

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

2

কেবলমাত্র পাস করা ইভেন্ট ইভেন্টটিরctrlKey সম্পত্তি ব্যবহার করার জন্য এটির অন্য পদ্ধতির (কোনও প্লাগইন প্রয়োজন নেই) এটি নির্দেশ করে যে ইভেন্টের সময় টিপে রাখা হয়েছিল কিনা, এটির মতো:Ctrl

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

এছাড়াও jquery দেখুন : কিপ্রেস, সিটিআরএল + সি (বা এর মতো কিছু কম্বো)


0

এটি ভুলবেন না, আপনি সনাক্ত করতে এবং Ctrl+ C/ ব্লক করতে সক্ষম হতে পারার Vপরেও আপনি একটি নির্দিষ্ট ক্ষেত্রের মান পরিবর্তন করতে পারেন।
এর সর্বোত্তম উদাহরণ হ'ল ক্রোমের ইন্সপেক্ট এলিমেন্ট ফাংশন, এটি আপনাকে কোনও ক্ষেত্রের মান-সম্পত্তি পরিবর্তন করতে দেয়।


0

আমি ইতিমধ্যে আপনার সমস্যা আছে এবং আমি নিম্নলিখিত কোড দ্বারা এটি সমাধান করে .. যে শুধুমাত্র সংখ্যা গ্রহণ করে

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


-1

আপনি কী কী টিপস ইভেন্টটি শুনতে এবং ডিফল্ট ইভেন্টটি (পাঠ্য প্রবেশ করানো) থামিয়ে দিতে পারেন যদি এটি নির্দিষ্ট কীডকোডগুলির সাথে মেলে


-1

গুরুত্বপূর্ণ তথ্য

আমি e.keyCodeকিছুক্ষণ ব্যবহার করছিলাম এবং আমি সনাক্ত করেছি যে আমি যখন ctrl+ টিপছি তখন .এই বৈশিষ্ট্যটি একটি ভুল নম্বর, 190 দেয়, যখন আসকি কোড .46 হয়!

সুতরাং আপনার e.key.toUpperCase().charCodeAt(0)পরিবর্তে ব্যবহার করা উচিত e.keyCode


-4

এটি রোধ করার কিছু উপায় রয়েছে।

তবে ব্যবহারকারী সর্বদা জাভাস্ক্রিপ্ট বন্ধ করতে বা কেবল পৃষ্ঠার উত্স কোডটি দেখতে সক্ষম হবে ।

কিছু উদাহরণ (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


2
এটিতে বেশ কয়েকটি সমস্যা রয়েছে: প্রথমত, এটি কোনও ব্রাউজারগুলিতে কাজ করবে না pasteযা কোনও ইভেন্ট নেই, যার মধ্যে ফায়ারফক্সের সমস্ত সংস্করণ version. এর পূর্বে অন্তর্ভুক্ত রয়েছে window.clipboardDataIE দ্বিতীয়ত, কেবলমাত্র আইআই এবং আমি বিশ্বাস করি এখন আইআই-তে ডিফল্টরূপে অক্ষম হয়ে গেছে believe । তৃতীয়ত, keydownযেখানে Ctrl কী টিপানো হয় সে সমস্ত ইভেন্ট অক্ষম করা অতিরিক্ত: আপনি দরকারী কীবোর্ড শর্টকাটগুলি যেমন Ctrl-A (সমস্ত নির্বাচন করুন) এবং Ctrl-Z (পূর্বাবস্থা) রোধ করেন। চতুর্থত, অন্যদের দ্বারা যেমনটি বলা হয়েছে, এটি করা সত্যিই খারাপ কাজ bad
টিম ডাউন

আপনি ঠিক বলেছেন যে প্রতিটি ব্রাউজারে কাজ করে না। কেউই সিটিআরএল ব্লক প্রকৃতপক্ষে বিরক্তিকর নয়। এটি একবার কার্যকর যখন কোনও ক্লায়েন্ট "নিশ্চিতকরণ ইমেল এবং পাসওয়ার্ড" ক্ষেত্রটি ব্লক করতে চেয়েছিল।
গুস্তাভো কার্ডোসো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.