javascript - jquery w3schools




Ctrl+V, Ctrl+C কিভাবে জাভাস্ক্রিপ্ট ব্যবহার করে? (12)

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

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

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


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

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

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


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-behavior-with-jquery/


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


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

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

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


আমি শুধু আগ্রহের এই কাজ। আমি সম্মত হচ্ছি এটি সঠিক কাজ নয়, তবে আমি মনে করি এটি অবশ্যই এর সিদ্ধান্ত হওয়া উচিত ... এছাড়াও কোডটিকে সহজে সরানোর পরিবর্তে কার্যকারিতা যোগ করার জন্য সম্প্রসারিত করা যেতে পারে (আরও উন্নত ক্লিপবোর্ড, বা Ctrl + গুলি ট্রিগার) একটি সার্ভার-পার্শ্ব সংরক্ষণ)।

$(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 লাইব্রেরি প্রয়োজন।

Codepen ডেমো

সম্পাদনা করুন: টিম ডাউন এর পরামর্শের জন্য ধন্যবাদ 3 অকার্যকর লাইনগুলি (ই.কে. সহ) সরানো হয়েছে (মন্তব্য দেখুন)

সম্পাদনা করুন: ম্যাকগুলির জন্য সমর্থন যোগ করা হয়েছে (ctrl এর পরিবর্তে cmd কী)


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

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

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

সম্পাদন: কিভাবে টিম ডাউন বলেন, এই ফাংশন সব ব্রাউজার নির্ভরশীল।


এন্টি-পাইরেসি পরিমাপ হিসাবে ব্যবহৃত যখন এটি বিরক্তিকর হতে পারে তবে আমি দেখতে পারি যে এটি এমন কিছু ঘটনা হতে পারে যেখানে এটি বৈধ হতে পারে, তাই:

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
}

Mac OS X Ctrl / Alt "down" এবং "up" ইভেন্টগুলি কখনও ট্রিগার করা হয় না, তাই মূল কোডটি চেক করার পরিবর্তে আমি event.ctrlKey ব্যবহার করেছি। তাই সনাক্ত করার একমাত্র উপায় হল event.ctrlKey ব্যবহার করা। উদাহরণস্বরূপ সিটি কন্ট্রোল Ctrl চেপে ধরে রাখা হয়। আমি metaKey জন্য ctrlKey সঙ্গে metaKey প্রতিস্থাপিত করেছি।

এই পদ্ধতির সীমাবদ্ধতা:

  • অপেরা ডান ক্লিক ইভেন্ট নিষ্ক্রিয় করার অনুমতি দেয় না

  • ব্রাউজার উইন্ডোগুলির মধ্যে টেনে আনুন এবং ড্রপ করা যাবে না যতদূর আমি জানি।

  • edit -> copy মেনু আইটেম যেমন ফায়ারফক্স এখনও অনুলিপি / আটকানোর অনুমতি দেয়।

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

প্রসঙ্গ মেনু ব্যবহার করে ব্যবহারকারীকে প্রতিরোধ করার জন্য সংক্ষিপ্ত সমাধান, কপি এবং jQuery এ কাটা:

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

এছাড়াও CSS এ পাঠ্য নির্বাচন নিষ্ক্রিয় করা সহজ হতে পারে:

.noselect {  
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
     user-select: none;
}

লাইভ ডেমো: 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!');
        }
    });

}); 

এটি করার আরেকটি উপায়: onpaste , oncopy এবং oncut ইভেন্টগুলি IE, ফায়ারফক্স, ক্রোম, সাফারি (কিছু ক্ষুদ্র সমস্যাগুলির সাথে) -এ নিবন্ধিত এবং বাতিল করা যেতে পারে, এই ইভেন্টটি বাতিল করার অনুমতি দেয় না এমন একমাত্র বড় ব্রাউজার অপেরা।

আপনি Ctrl + v এবং Ctrl + c রোধে আমার অন্যান্য উত্তরগুলিতে দেখতে পারেন অনেক পার্শ্বপ্রতিক্রিয়া সহ, এবং এটি এখনও ব্যবহারকারীদের ফায়ারফক্স 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
}

সাফারিটিতে এখনও এই পদ্ধতির সাথে কিছু ক্ষুদ্র সমস্যা রয়েছে (ডিফল্ট রোধে এটি কপি / কপি জায়গায় ক্লিপবোর্ডটি সাফ করে) তবে সে বাগ এখন ক্রোমে সংশোধন করা হয়েছে।

আরও দেখুন: http://www.quirksmode.org/dom/events/cutcopypaste.html এবং সংশ্লিষ্ট তথ্যের জন্য http://www.quirksmode.org/dom/events/tests/cutcopypaste.html আরও তথ্যের জন্য।


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);"  />





html