js判断控制台是否被打开【兼容所有浏览器】

1,481 阅读1分钟

前言

偶然一次爬取xx官方医疗信息平台数据,发现只要打开过控制台出现循环debugger关了之后,该平台就会启动无限循环数据导致页面很卡,为了探索改技术原理百度了好多都感觉不是理想有的也不兼容(如下代码我的最新chrome无效)。

(function () {
var re = /x/;
var i = 0;
console.log(re);
 
re.toString = function () {
alert("请关闭控制台");
return '第 ' + (++i) + ' 次打开控制台';
};
})();

控制台打开会触发什么

首先我们要了解控制台打开会做什么?根据我知识面的了解,打开控制台我肯定会触发debugger进行程序阻塞,

利用debugger阻塞

好了我们是不是可以利用这个阻塞做点什么?是的阻塞肯定会产生时间差我们可以利用时间差来判断是否阻塞了,代码如下:

var firstTime
var lastTime
setInterval(() => {
    firstTime = Date.now()
    debugger
    lastTime = Date.now()
    if (lastTime - firstTime > 10) {
        console.log('这里可以屏蔽当前dom或者启动无限数据循环')
    }
}, 100)

结语

由于文笔不行就直接上代码,可能不是很完善,但是目前满足基本需求,希望对目前有需求的提供个思路。