首页 > 其他分享 >浏览器开发者工具打开检测

浏览器开发者工具打开检测

时间:2023-09-25 13:22:05浏览次数:43  
标签:浏览器 log 检测 window 开发者 console 控制台 打开 const

目录

方法一console.log

在safari中,如果打开了控制台,console.log打印日期实例、函数实例、正则实例会触发两次toString方法,那么可以重写toString方法检测是否打开了控制台。

let count = 0;
const temp = () => {}
temp.toString = () => {
  count++;
  return "";
}
console.log(temp);
alert(count)
if (count >= 2) {
  alert('打开了开发中工具');
}

在safari中,如果打开了控制台,console.logdom节点的时候会触发dom节点上id的getter方法,通过自定义这个getter方法来检测是否打开了safari的控制台。

const ele = document.createElement("a");
Object.defineProperty(ele, "id", {
  get: () => {
    alert('打开了开发中工具')
  },
});
console.log(ele)

在Firefox中,如果打开了控制台,console.log正则时候会触发正则的toString方法,那么可以重写toString方法来检测是否打开了控制台。(适用于火狐浏览器, 不适用于chrome safari edge)


const temp = /\./
temp.toString = () => {
  alert('打开了开发中工具');
  return "";
}
console.log(temp);

方法二: debugger

debugger只有在打开控制台的情况下才会触发,而人的手动跳过断点又没有那么快,这中间就有了个时间差,依据这个时间差来判断是否打开了控制台

function detectDebug() {
  const date = Date.now();
  debugger;
  // 你的手不可能快于0.1秒
  if (Date.now() - date > 100) {
    alert('打开了控制台')
  }
}
detectDebug()

方法三:console.table

控制台打开的情况下,console.table的参数如果是一个大对象数组,会比较耗时,而console.log耗时和console.table的耗时差了个量级,通过对比两者的耗时来确定是否打开了控制台。

通过测试总结,如果console.table的耗时超过 console.log的十倍可以确定打开了控制台。

// 创建一个大的数组对象
function createArr() {
  const obj = {};
  for (let i = 0; i < 200; i++) {
    obj[i] = i;
  }
  const arr = [];

  for (let i = 0; i < 100; i++) {
    arr.push(obj);
  }

  return arr;
}

let arr = createArr();

function calculateTime(func) {
  const start = Date.now();
  func();
  return Date.now() - start;
}
// 时间耗时
const tableConsumeTime = calculateTime(() => console.table(arr));

const logConsumeTime = calculateTime(() => console.log(arr));

console.clear()
alert('logPrintTime:' + logConsumeTime)
alert('tablePrintTime:' + tableConsumeTime)

if (tableConsumeTime > logConsumeTime * 10) {
  alert('打开了控制台')
}

方法四:内容宽度

当控制台打开状态下,页面的展示内容是被侵占的,所以可以使用window.outerWidth - window.innerWidth 宽度差来确定是否打开了控制台

有一些情况需要考虑:

  1. 页面缩放会影响window.innerWidth
  2. iframe的window.innerWidth是自己的宽度,而不是顶层页面的宽度
  3. 360浏览器等会有一个边栏放置一些功能菜单,这时候就要将这个差值考虑在内。
  4. 新版chrome浏览器的收藏夹和阅读清单可以在右侧打开一个菜单栏,这个菜单栏也会占用内容区域。
function check(){
  let screenRatio = window.devicePixelRatio

  if(!screenRatio && window.screen.deviceXDPI && window.screen.logicalXDPI ){
    screenRatio = window.screen.deviceXDPI / window.screen.logicalXDPI  
  }

  const widthFlag = window.outerWidth - window.innerWidth * screenRatio > 200;  
  const heightFlag = window.outerHeight - window.innerHeight * screenRatio > 300;  
  if (widthFlag || heightFlag) {
    alert('打开了控制台')
  }
}
check()
window.addEventListener('resize', () => {
  setTimeout(() => {
    check();
  }, 1000);
}, true);

总结

  1. 优先使用方法一,可以在safari firefox中起作用
  2. chrome中使用方法二
  3. 如果禁用了debugger,可以使用方法三,不过方法三属于经验总结,并不一定准确,可能会误判。
  4. 方法四误判的概率更大,如果可以确定目标浏览器,则可以针对性的使用。

标签:浏览器,log,检测,window,开发者,console,控制台,打开,const
From: https://www.cnblogs.com/walkermag/p/17727733.html

相关文章

  • FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心
    FlashDuty:一站式告警响应平台,前往此地址免费体验!自定义字段FlashDuty已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了Lables进行展示。尽管如此,我们用户还是会有一些扩展或定制性的需求,比如人工标记一个故障是否为误报。因此我们提供了自定义字段功能,......
  • GPT 被曝重大缺陷;腾讯侦破国内首个 AI 游戏外挂;特斯拉人形机器人再进化丨 RTE 开发者
    开发者朋友们大家好:这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎大家留......
  • 异常检测:探索数据深层次背后的奥秘《下篇》
    异常检测:探索数据深层次背后的奥秘《下篇》异常检测——高维数据异常检测:孤立森林在实际场景中,很多数据集都是多维度的。随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。维度诅咒不止给异常检测带来了挑战,对距离的计算,聚类都带来了难题。......
  • 【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心
    FlashDuty:一站式告警响应平台,前往此地址免费体验!自定义字段FlashDuty已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了Lables进行展示。尽管如此,我们用户还是会有一些扩展或定制性的需求,比如人工标记一个故障是否为误报。因此我们提供了自定义字段功能,来进一......
  • 异常检测:探索数据深层次背后的奥秘《下篇》
    异常检测:探索数据深层次背后的奥秘《下篇》异常检测——高维数据异常检测:孤立森林在实际场景中,很多数据集都是多维度的。随着维度的增加,数据空间的大小(体积)会以指数级别增长,使数据变得稀疏,这便是维度诅咒的难题。维度诅咒不止给异常检测带来了挑战,对距离的计算,聚类都带来了难题......
  • m基于Faster-RCNN网络的人员吸烟行为检测系统matlab仿真,带GUI操作界面
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要         人员吸烟行为检测系统在公共场所如学校、医院、公共交通工具等广泛使用。这类系统通常通过图像或视频分析来检测人员是否有吸烟行为。其中,基于Faster-RCNN网络的吸烟行为检测是一种常......
  • flask框架在Centos正常启动后到Windows浏览器访问(http://192.168.124.129:5550/)提示无
    1、flask在centos正常启动 2、然后复制链接到window访问,提示无法访问3、排查下,Linux和Windows互相ping下WindowpingLinuxIP LinuxpingWindowIP如上能够正常ping通,说明网段是正常的4、再排查下,Linux是不是防火墙没有关闭查看防火墙状态命令:systemctlstatusfir......
  • 为什么 Rust 备受开发者青睐?
    引子作为一名敏锐的前端开发者,您可能早已对Rust有所耳闻,毕竟近几年,使用Rust开发的前端构建工具每经发布,其卓越的性能数据总是能带来社区的一阵惊叹。图片来源:https://swc.rs/例如SWC就在其官网宣称在单线程上的执行速度是传统代码转译工具Babel的20倍。如果在4核......
  • 基于Yolov2深度学习网络的车辆检测算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022A 3.算法理论概述        车辆检测是计算机视觉领域中的一个重要问题。它在自动驾驶、智能交通系统、交通监控以及车辆计数等应用场景中起着至关重要的作用。近年来,深度学习在图像识别领域取得了显著的......