网页如何实现打开开发者工具就自动关闭页面的功能?
微wx笑
2025-06-08【网页网站】
133
0
0关键字:
网页实现“打开开发者工具自动关闭页面”的功能,主要通过以下技术手段组合实现:1. 检测开发者工具打开的核心逻辑(1)窗口尺寸变化监听开发者工具打开时(如Chrome的F12),会默认以侧
网页实现“打开开发者工具自动关闭页面”的功能,主要通过以下技术手段组合实现:
1. 检测开发者工具打开的核心逻辑
(1)窗口尺寸变化监听
开发者工具打开时(如Chrome的F12),会默认以侧边栏形式嵌入,导致页面可视区域宽度/高度缩小(通常减少约300px)。通过监听 resize
事件,判断窗口是否“非满屏”:
1 2 3 4 5 6 7 8 9 | let isDevToolsOpen = false; const originalHeight = window.innerHeight; window.addEventListener('resize', () => { if (window.innerHeight < originalHeight - 100) { // 经验值,工具条高度差异 isDevToolsOpen = true; closePage(); // 触发关闭 } }); |
(2)性能检测(大数组打印延迟)
利用开发者工具控制台的“对象展开”特性:未打开工具时,console.log
打印大数组不会展开,性能无明显延迟;打开工具后,数组会自动展开,导致打印耗时增加。通过递归检测耗时判断:
1 2 3 4 5 6 7 8 9 | function detectDevTools() { const start = Date.now(); console.log(new Array(1000000).fill(0)); // 强制打印大数组 return Date.now() - start > 50; // 经验阈值,工具打开时耗时更长 } setInterval(() => { if (detectDevTools()) closePage(); }, 1000); |
(3)异步断点触发(高版本Chrome)
Chrome v121+ 支持通过异步递归 debugger
检测工具打开,无需刷新页面:
1 2 3 4 5 6 7 8 | async function checkDevTools() { while (true) { await new Promise(resolve => setTimeout(resolve, 100)); debugger; // 打开工具时会在此处暂停,触发检测 if (isDevToolsOpen) closePage(); } } checkDevTools(); |
2. 关闭页面的实现方式
(1)重定向空白页(绕过 window.close
限制)
由于 window.close()
仅能关闭通过 window.open
打开的窗口,直接调用无效。改用重定向:
1 2 3 4 5 | function closePage() { window.open('about:blank', '_self').close(); // 先打开空白页再关闭 // 或直接跳转空白(部分浏览器有效) window.location.href = 'about:blank'; } |
(2)模拟页面崩溃(极端手段)
通过死循环或内存泄漏迫使浏览器关闭标签页(体验差,慎用):
1 2 3 4 5 | function closePage() { while (true) { new Array(10000000).fill(0); // 占用大量内存 } } |
3. 禁用快捷键防止工具打开
拦截 F12
、Ctrl+Shift+I
等快捷键,阻止用户手动唤起工具:
1 2 3 4 5 6 | document.addEventListener('keydown', (e) => { // 禁用F12 if (e.key === 'F12') e.preventDefault(); // 禁用Ctrl+Shift+I(Chrome) if (e.ctrlKey && e.shiftKey && e.key === 'I') e.preventDefault(); }); |
4. 增强防御:第三方库辅助(如 disable-devtool
)
通过引入开源库(如 disable-devtool),封装上述逻辑并增强兼容性:
1 2 3 4 5 6 7 8 9 | import DisableDevtool from 'disable-devtool'; new DisableDevtool({ onDetect: () => { window.location.href = 'about:blank'; // 检测到工具打开即关闭 }, disableShortcuts: true, // 禁用快捷键 detectMenuOpen: true // 检测从浏览器菜单打开的工具 }); |
5. 局限性与绕过方法
局限性:无法阻止浏览器菜单手动打开工具(如“更多工具”→“开发者工具”),但通过尺寸监听仍可触发关闭。
绕过方法:使用无痕模式、分离工具窗口(尺寸不变),或通过插件(如
DevTools Detach
)规避检测。
总结
该网页通过窗口尺寸监听+性能检测+快捷键拦截的组合策略,实现了“打开开发者工具自动关闭页面”的效果。核心逻辑是利用前端间接手段(非API)检测工具状态,并通过重定向或内存操作强制关闭页面,本质是一种“反调试”防御措施,旨在保护页面内容不被轻易分析。
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/web/2025-06-08/2080.html