网页如何防止粘贴事件发生?

8
在研究我的超级用户问题如何有选择地禁用粘贴拦截器时,我发现我遇到问题的特定网站似乎没有使用任何现有解决方案所期望的方法。
虽然全局解决方案使用dom.event.clipboardevents.enabled偏好设置或FireFox中的禁用剪贴板操作插件有效,但它们也存在一个问题,即有合法原因为什么网站可能想要挂钩onpaste(例如Google文档的富文本支持或Facebook的链接处理),因此我不想完全禁用该功能。
我们找到的解决方案(例如 Derek Prior 的重新启用令人讨厌的 Web 表单上的密码粘贴和 Chris Bailey 改进版的重新启用令人讨厌的 Web 表单上的密码粘贴 (v2)),这些方案使用书签来有选择性地禁用粘贴阻止代码的功能,但似乎在这个页面没有作用。
这让我想知道 petplanet 网站如何禁用粘贴,为什么现有的解决方案在该网站上不起作用,以及还有哪些其他方法可以防止粘贴阻止?回答这些问题应该有助于我们编写全面的书签解决方案,从而可以彻底避免这种恶劣的做法。
2个回答

2
您可以使用 jQuery 的 paste 事件来监听该事件,并使用 preventDefault() 来防止该事件发生。
this页面中,他们使用了以下的 jQuery。
$('#pwd, #pwd2').bind('paste',function(e){
    e.preventDefault();
    alert('Please type your password.')
});    

打开Firebug,进入脚本选项卡,然后在字符串 Please type your password.(不是浏览器搜索栏,而是Firebug的搜索栏)中搜索,您将找到上述代码。代码位于logon.asp文件中。 Image 要禁用它,您只需使用off方法,如下所示:$('#id1').off()。这会解除所有元素的事件绑定,该元素具有id='id1'

0
据我所知,你只能通过JavaScript“禁用”这些东西。
我能想象这并不是你要找的答案,但你可以尝试像这样做:
var keys = [];
window.addEventListener("keydown",
    function(e){
        keys[e.keyCode] = true;
        checkCombinations(e);
    },
false);

window.addEventListener('keyup',
    function(e){
        keys[e.keyCode] = false;
    },
false);

function checkCombinations(e){
    // try and prevent cntrl+v (paste)
    if(keys["v".charCodeAt(0)] && e.ctrlKey){
        alert("You're not allowed to paste");
        e.preventDefault();
    }
}

源代码:在Javascript中获取当前按下的所有键的列表


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接