前言
吧友提到了拦截控制台的情况。别人页面中有个js文件,无法调试.有啥办法解除这个限制.
于是好奇找了下stackoverflow
, Find out whether Chrome console is open, 但是代码不太懂。
后来dalao告诉我知乎有篇文章: 前端开发中如何在JS文件中检测用户浏览器是否打开了调试面板(F12打开开发者工具)?
Chrome 适用(截止至63.0.3239.108)
在控制台打开的时候, 打印html
元素会去取id
属性的值, 只要覆盖id
属性的get
方法, 就可以判断是否开启控制台。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> status: <div id="devtool-status"></div> </body> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <script> var checkStatus;
var element = new Image();
Object.defineProperty(element, 'id', { get:function() { checkStatus='on'; } });
setInterval(function() { checkStatus = 'off'; console.debug(element); document.querySelector('#devtool-status').innerHTML = checkStatus; }, 1000) </script> </html>
|
Firefox 适用(截止至57.0.4)
打印普通对象的日志会调用该对象的toString
方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> status: <div id="devtool-status"></div> </body> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <script> var checkStatus;
var devtools = /./; devtools.toString = function() { checkStatus = 'on'; }
setInterval(function() { checkStatus = 'off'; console.log(devtools); document.querySelector('#devtool-status').innerHTML = checkStatus; }, 1000) </script> </html>
|
参考资料