原生js实现禁止截屏
在原生JavaScript中实现禁止截屏的功能存在一定局限性,因为浏览器出于安全考虑不允许直接控制操作系统级别的截屏行为。但可以通过以下方法增加截屏难度或干扰截屏结果:
禁用右键和开发者工具
通过阻止默认右键菜单和禁用开发者工具快捷键,减少用户手动截屏的途径:

document.addEventListener('contextmenu', function(e) {
e.preventDefault();
});
document.addEventListener('keydown', function(e) {
// 禁用F12、Ctrl+Shift+I等开发者工具快捷键
if (e.key === 'F12' ||
(e.ctrlKey && e.shiftKey && e.key === 'I') ||
(e.ctrlKey && e.shiftKey && e.key === 'J') ||
(e.ctrlKey && e.key === 'U')) {
e.preventDefault();
}
});
动态内容干扰
使用Canvas绘制敏感内容并定期更新,使静态截屏难以获取完整信息:

const canvas = document.createElement('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');
function drawProtectedContent() {
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = 'black';
ctx.font = '20px Arial';
ctx.fillText('敏感内容:' + Math.random().toString(36).substring(2), 50, 50);
setTimeout(drawProtectedContent, 1000); // 每秒刷新内容
}
drawProtectedContent();
全屏API限制
强制全屏模式并监听退出事件,降低截屏机会:
document.documentElement.requestFullscreen()
.catch(err => console.error('全屏失败:', err));
document.addEventListener('fullscreenchange', () => {
if (!document.fullscreenElement) {
document.documentElement.requestFullscreen()
.catch(err => console.error('重新进入全屏失败:', err));
}
});
视觉干扰层
叠加半透明遮罩层干扰截屏效果:
.protection-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: repeating-linear-gradient(
45deg,
rgba(0,0,0,0.1),
rgba(0,0,0,0.1) 10px,
rgba(255,255,255,0.1) 10px,
rgba(255,255,255,0.1) 20px
);
pointer-events: none;
z-index: 9999;
}
注意事项
- 这些方法无法阻止物理设备截屏(如手机截屏快捷键)
- 专业截图工具可能绕过部分限制
- 过度限制可能影响正常用户体验
- 敏感内容建议使用DRM等专业解决方案
对于更高安全需求,建议考虑使用专业数字版权管理(DRM)技术如Widevine或FairPlay。






