前端用js禁用复制事件
我现在有一个html
<body>
<p>
这是一段我要复制的文字信息xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
这是一段我要复制的文字信息xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
这是一段我要复制的文字信息xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
</p>
</body>
我需要实现不让任何人复制页面内容的功能。这个其实有很多简单的方式就能实现。
一、标准操作——监听
给document添加copy监听,直接 preventDefault 阻止,然后还能用 clipboardData 自定义复制的内容。或者更狠一些,直接绑在window上,禁止整个窗口的复制。
// 方案1. document监听复制事件
document.addEventListener('copy', function (e) {
e.preventDefault();
// 这里可以自定义复制到的内容
e.clipboardData.setData('text/plain', '自定义的复制内容');
alert('复制事件被禁止');
})
// 方案2. 效果跟方案1相同,直接改变document自身的copy事件
document.oncopy = (e) => {
alert('复制事件被禁止');
e.clipboardData.setData('text/plain', '自定义的复制内容');
return false;
}
// 方案3. 范围再大一些可以限制整个窗口的复制
window.addEventListener('copy', function (e) {
e.preventDefault();
e.clipboardData.setData('text/plain', '全局禁止复制');
alert('全局复制事件被禁止');
})
除了上面的监听还有类似 beforecopy 这种事件也可以。
二、其他操作
1. 用css
可以直接用user-select属性,设置为none,即可让用户不能选中文本。但是对用户来说不怎么友好,莫名其妙没发选中了。
p {
user-select: none;
}
2. 其它监听混用
有了直接监听copy事件的,可以修改document其他的事件监听也能禁止用户操作。
// 禁止打开右击菜单
document.oncontextmenu = () => {
alert('右击菜单被禁止');
return false;
}
// 禁止选中文字
document.onselectstart = () => {
alert('选中文字被禁止');
return false;
}
// 禁止剪切(可以正常选中、剪切,选中后剪切的内容为自定义内容,不设置的话为空)
// 注意:网页里的文字基本本身就不能剪切,所以这个一般不设置
document.oncut = (e) => {
alert('剪切事件被禁止');
e.clipboardData.setData('text/plain', '自定义的剪切内容');
return false;
}

浙公网安备 33010602011771号