网页网站您现在的位置是:首页 > 博客日志 > 网页网站

网页如何实现打开开发者工具就自动关闭页面的功能?

<a href='mailto:'>微wx笑</a>的头像微wx笑 2025-06-08网页网站133 0 0关键字:   

网页实现“打开开发者工具自动关闭页面”的功能,主要通过以下技术手段组合实现:1. 检测开发者工具打开的核心逻辑(1)窗口尺寸变化监听开发者工具打开时(如Chrome的F12),会默认以侧

无知人生,ivu4e.com,ivu4e.cn

网页实现“打开开发者工具自动关闭页面”的功能,主要通过以下技术手段组合实现:NIo无知

1. 检测开发者工具打开的核心逻辑

(1)窗口尺寸变化监听

开发者工具打开时(如Chrome的F12),会默认以侧边栏形式嵌入,导致页面可视区域宽度/高度缩小(通常减少约300px)。通过监听 resize 事件,判断窗口是否“非满屏”:NIo无知

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 打印大数组不会展开,性能无明显延迟;打开工具后,数组会自动展开,导致打印耗时增加。通过递归检测耗时判断:NIo无知

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 检测工具打开,无需刷新页面:NIo无知

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 打开的窗口,直接调用无效。改用重定向:NIo无知

1
2
3
4
5
function closePage() {
  window.open('about:blank', '_self').close(); // 先打开空白页再关闭
  // 或直接跳转空白(部分浏览器有效)
  window.location.href = 'about:blank';
}

(2)模拟页面崩溃(极端手段)

通过死循环或内存泄漏迫使浏览器关闭标签页(体验差,慎用):NIo无知

1
2
3
4
5
function closePage() {
  while (true) {
    new Array(10000000).fill(0); // 占用大量内存
  }
}

3. 禁用快捷键防止工具打开

拦截 F12Ctrl+Shift+I 等快捷键,阻止用户手动唤起工具:NIo无知

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),封装上述逻辑并增强兼容性:NIo无知

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. 局限性与绕过方法

  • 局限性:无法阻止浏览器菜单手动打开工具(如“更多工具”→“开发者工具”),但通过尺寸监听仍可触发关闭。NIo无知

  • 绕过方法:使用无痕模式、分离工具窗口(尺寸不变),或通过插件(如 DevTools Detach)规避检测。NIo无知

总结

该网页通过窗口尺寸监听+性能检测+快捷键拦截的组合策略,实现了“打开开发者工具自动关闭页面”的效果。核心逻辑是利用前端间接手段(非API)检测工具状态,并通过重定向或内存操作强制关闭页面,本质是一种“反调试”防御措施,旨在保护页面内容不被轻易分析。NIo无知


NIo无知

无知人生,ivu4e.com,ivu4e.cn

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/web/2025-06-08/2080.html

很赞哦! (0) 有话说 (0)

相关文章

文章评论