网站HTML页面无法复制文本的拦截代码完整分析
|
admin
2026年7月7日 18:30
本文热度 55
|
网站HTML页面采用四层组合防复制拦截机制,按生效优先级从高到低拆解如下:
一、HTML body 内联事件拦截(最核心、最基础拦截)
页面<body>标签会绑定全套复制阻断事件,这是绝大多数老 ASP 论坛、OA 站点通用写法,也是你无法选中文本、右键复制的首要原因:
<body
oncontextmenu="return false" <!-- 拦截鼠标右键,无法调出复制菜单 -->
onselectstart="return false"
oncopy="return false"
oncut="return false"
ondragstart="return false"
onmouseup="document.selection.empty()"
>
关键事件作用
onselectstart:直接禁止鼠标划选文字,视觉上无法高亮文本,复制前提消失;
oncontextmenu:右键直接失效,无法右键 “复制 / 查看源代码”;
oncopy:就算强行选中,按 Ctrl+C 也会被拦截,剪贴板拿不到内容。
二、CSS 全局禁止文本选中(辅助拦截)
页面内置全局样式,强制所有页面元素禁止文本选择,双重锁死选中行为:
body {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
作用:浏览器原生层面屏蔽文本高亮,即便 JS 被临时绕过,也无法选中文字。
三、全局 JS 事件监听拦截(兜底拦截)
页面底部会嵌入一段全局 JS 脚本,覆盖所有复制相关浏览器事件,兼容现代浏览器标准事件 API:
document.addEventListener('contextmenu', e=>e.preventDefault());
document.addEventListener('selectstart', e=>e.preventDefault());
document.addEventListener('copy', e=>e.preventDefault());
document.addEventListener('cut', e=>e.preventDefault());
document.addEventListener('keydown', function(e){
if(e.ctrlKey && (e.key=='c' || e.key=='a')) e.preventDefault();
})
适配现代 Chrome/Edge/Firefox,弥补老式onxxx内联事件部分浏览器兼容漏洞。
四、ASP 论坛额外加固:DOM 选中清空脚本
老 ASP 论坛通用补充代码,鼠标松开瞬间清空选中内容,防止快速截取:
document.onmouseup = function(){
if(document.selection) document.selection.empty();
}
为什么这套代码会导致 “完全无法复制”
先通过selectstart+CSSuser-select:none让你根本选不中文字;
就算通过特殊手段选中,oncopy+copy 事件监听阻断剪贴板写入;
右键菜单被contextmenu禁用,无法通过右键复制;
Ctrl+C、Ctrl+A 快捷键被 keydown 拦截,键盘复制通道关闭。
快速验证 & 临时破解方法(确认拦截代码生效)
F12 打开开发者工具 → 设置 → 勾选禁用 JavaScript,刷新页面即可自由复制;
或地址栏执行代码一键清除所有拦截:
javascript:(function(){document.oncontextmenu=null;document.onselectstart=null;document.oncopy=null;document.body.style.userSelect='auto';})()
总结页面核心拦截代码清单
第一层:<body>内联oncontextmenu/onselectstart/oncopy事件(主拦截)
第二层:CSS user-select: none 禁止文本选中
第三层:JS addEventListener 全局监听复制、右键、快捷键事件
第四层:onmouseup 清空选中区域兜底加固
其中 onselectstart="return false" 是最关键代码,直接让鼠标无法划选文字,是页面不能复制的根本原因。
该文章在 2026/7/7 18:30:36 编辑过