前端无法真正禁止截屏,所有防护仅提高普通用户门槛;系统级截图(如PrintScreen、OBS)完全绕过DOM事件和样式控制,且现代浏览器不触发PrintScreen监听;真正有效的方案是内容不落地(Canvas动态绘制)、动态水印溯源、服务端校验与法律声明。
不能真正禁止截屏,所有前端手段都只能增加普通用户截图的门槛,无法防御系统级抓图(如 PrintScreen、Cmd+Shift+4、OBS 录屏等)。
user-select: none 和禁右键没用这类样式和事件拦截只影响浏览器内操作:禁选中会阻止文字高亮复制,禁右键能拦住「图片另存为」或「检查元素」,但对屏幕捕获完全无效。操作系统层面的截图不经过 DOM 事件流,keydown 监听 PrintScreen 在绝大多数浏览器中根本收不到事件——Chrome、Firefox、Safari 均不触发,只有极个别旧版 IE 曾部分支持。
user-select: none 只让文字不可选,不影响截图内容oncontextmenu="return false" 拦不住键盘快捷键或系统级工具clipboardData.setData("Text", ""))仅对 IE 有效,现代浏览器已废弃该 APINoPrint.js 这类库实际做了什么它本质是组合封装了常见防护动作:禁文本选择、禁右键、拦截 Ctrl+S、模糊失焦区域。但它不处理截图逻辑,所谓「防截图」只是靠 autoBlur 在鼠标移出时让页面变模糊——这属于视觉干扰,不是技术拦截。
noScreenshot: true 实际只是调用 document.addEventListener("visibilitychange") + blur 处理,并非检测截图行为getDisplayMedia 检测录屏启动,但无法用于截图,且需用户主动授权媒体权限https://pdfanticopy.com/noprint.js 无源码审计,存在潜在 XSS 风险把精力放在「内容不落地」和「溯源可追责」上,比徒劳拦截更务实。
立即学习“前端免费学习笔记(深入)”;
<canvas> 动态绘制(如表格、图表),每次 requestAnimationFrame 清屏重绘,截图得到的是残影或空白帧setInterval 不断更新 transform 和 opacity,并嵌入用户 ID 或时间戳,确保截图可追溯<small>© 版权所有,截图传播将追究法律责任</small>,虽不能技术阻断,但提升维权依据最常被忽略的一点:任何前端防护都会被 F12 绕过。如果你的内容必须绝对保密,就别让它出现在浏览器里——用桌面客户端、PDF 加密、或 DRM 视频流才是正解。