本文详解如何利用CSS属性user-select:none结合JavaScript事件监听,实现网页内容仅在用户登录后可复制的功能。通过禁用默认选中、拦截快捷键及处理DOM节点样式,完整演示了从基础CSS设置到JS深度控制的实现逻辑与代码示例。
许多网站采用限制复制的策略,其核心原理涉及CSS与JavaScript的配合。首先,通过设置CSS属性user-select为none,可以阻止鼠标选中文本,从而禁止常规复制操作。然而,用户仍可通过浏览器开发者工具审查元素并移除该样式来绕过限制。因此,要实现完整的复制控制,必须结合JavaScript对选中内容进行进一步处理。
CSS属性user-select详解
该属性用于控制用户是否可以选择文本,常用取值包括:
none:元素及其子元素的文本不可被选中。auto:取值取决于多个条件,具体包括:在::before和::after伪元素上采用none;若元素为可编辑元素,则采用contain;若父元素的user-select为all,则该元素也为all;若父元素为none,则该元素也为none;否则默认为text。text:允许用户选中文本。all:单击文本时选中整行。
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;jQuery禁用相关操作
禁用复制、粘贴和剪切功能
$(document).on("cut copy paste", function(e) {
e.preventDefault();
});禁用右键菜单
$(document).on("contextmenu", function(e) {
e.preventDefault();
});上述代码仅阻止了浏览器默认的操作行为。如果用户试图通过浏览器菜单或快捷键执行复制、粘贴和剪切,这些限制将失效。
JavaScript屏蔽指定内容的选中
window.addEventListener('copy',function(){
const selection = window.getSelection();
const copyNode = selection.getRangeAt(0).cloneContents();
});
const div = document.createElement('div');
div.appendChild(copyNode);
// 通过getComputedStyle获取style值,需要将节点挂载到dom树上,因此append到body
document.body.appendChild(div);
const nodelist = div.childNodes;
for (let i = 0; i < nodelist.length; i++) {
const curnode = nodelist[i];
const nodeType = curnode.nodeType;
// 将节点类型为元素节点,并且设置了user-select:none的节点从复制的内容中过滤掉
if (nodeType === 1 && window.getComputedStyle(curnode).userSelect === 'none') {div.removeChild(curnode);}
}
// 获取过滤后的数据
const cpt = div.innerHTML;
selection.select(cpt);
document.execCommand('copy');
//复制到剪切板总结
至此,关于利用JS结合CSS实现登录后才能复制的效果实例介绍完毕。如需了解更多相关JS与CSS实现复制控制的内容,请搜索本站历史文章或继续阅读后续相关文章。感谢大家的支持!