如何检测ctrl+ v, ctrl+c使用 Javascript?
我需要限制在我的 textarea 中粘贴,最终用户不应复制和粘贴内容,用户只能在 textarea 中键入文本。
如何实现这一目标?
如何检测ctrl+ v, ctrl+c使用 Javascript?
我需要限制在我的 textarea 中粘贴,最终用户不应复制和粘贴内容,用户只能在 textarea 中键入文本。
如何实现这一目标?
我只是出于兴趣这样做。我同意这不是正确的做法,但我认为这应该是操作员的决定......此外,代码可以轻松扩展以添加功能,而不是将其删除(例如更高级的剪贴板,或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;
    });
    
    // 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 库。
编辑:由于 Tim Down 的建议,删除了 3 条冗余行(涉及 e.which)(见评论)
编辑:添加了对 Mac 的支持(cmd键而不是ctrl)
使用 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/
虽然在用作反盗版措施时可能会很烦人,但我可以看到在某些情况下它可能是合法的,因此:
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在Ctrl键之后在 eg c 事件中使用按住。我也ctrlKey用metaKeyfor macs代替。
这种方法的局限性:
edit->copy菜单项仍然可以允许复制/粘贴。有这样做的另一种方法: onpaste,oncopy和oncut事件可以注册并在IE,火狐,Chrome,Safari浏览器取消了(有一些小问题),唯一的主要的浏览器不允许取消这些活动是Opera。
正如您在我的其他答案中看到的那样,拦截Ctrl+v和Ctrl+c会带来许多副作用,但它仍然无法阻止用户使用 FirefoxEdit菜单等进行粘贴。
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了解更多信息。
现场演示: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!');
        }
    });
});