前端如何在不引入库的情况下判断用户打开了 F12 控制台 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TaoLoading
V2EX    前端开发

前端如何在不引入库的情况下判断用户打开了 F12 控制台

  •  
  •   TaoLoading
    TaoLoading 2024-04-27 12:30:04 +08:00 3663 次点击
    这是一个创建于 581 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个需求需在不引入库的情况下判断用户打开了 F12 控制台,而且要做到多浏览器兼容,大佬们有合适的办法吗

    28 条回复    2024-05-14 15:41:09 +08:00
    gorira
        1
    gorira  
       2024-04-27 12:36:00 +08:00   3
    联合十部委出台相关规定,使用控制台查看本站信息违反网络安全法
    ktqFDx9m2Bvfq3y4
        2
    ktqFDx9m2Bvfq3y4  
       2024-04-27 12:40:06 +08:00 via iPhone
    玩这种黑魔法没意思,双输。
    JK9993
        3
    JK9993  
       2024-04-27 12:46:17 +08:00
    复制一下源码?
    TaoLoading
        4
    TaoLoading  
    OP
       2024-04-27 12:51:17 +08:00
    @Chad0000 不是呀,我在做浏览器插件开发,期望当检测到用户开启开发者控制台并选择移动端样式后隐藏我的插件,也是优化用户体验
    zcf0508
        5
    zcf0508  
       2024-04-27 12:59:51 +08:00 via Android
    @TaoLoading 那你直接移动端样式兼容就好了,为啥要判断是不是开了控制台
    TaoLoading
        6
    TaoLoading  
    OP
       2024-04-27 13:03:12 +08:00
    @zcf0508 因为这个插件是全平台兼容的,也有移动端
    estk
        7
    estk  
       2024-04-27 13:17:48 +08:00 via iPhone
    淘宝的 f12 是招聘内容
    bgm004
        8
    bgm004  
       2024-04-27 13:48:14 +08:00 via Android
    不用第三方库你不还是要自己写,有什么区别?
    agagega
        9
    agagega  
       2024-04-27 13:53:10 +08:00 via iPhone
    以前在本站看到过一个人贴了个特牛逼的网页,阻止用户打开控制台,标题忘了,可以搜搜
    yhxx
        10
    yhxx  
       2024-04-27 15:21:08 +08:00
    不引入库是啥意思
    找个库把它的代码复制一份算引入库吗
    yhxx
        11
    yhxx  
       2024-04-27 15:21:40 +08:00
    chrome 可以用这个

    (function () {
    var re = /x/;
    var i = 0;
    console.log(re);

    re.toString = function () {
    return '第 ' + (++i) + ' 次打开控制台';
    };
    })();

    作者:XFD111
    链接: https://www.zhihu.com/question/24188524/answer/117094116
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    TaoLoading
        12
    TaoLoading  
    OP
       2024-04-27 15:31:51 +08:00
    @Track13 点就是在这,引入库会让插件变大,性能较差
    TaoLoading
        13
    TaoLoading  
    OP
       2024-04-27 15:33:18 +08:00
    @yhxx #11 这种重写 toString() 的方法已经不行了
    bgm004
        14
    bgm004  
       2024-04-27 17:41:45 +08:00 via Android   1
    @TaoLoading 插件大不等于性能差。
    jqtmviyu
        15
    jqtmviyu  
       2024-04-27 19:12:11 +08:00   1
    用 debugger 糊弄下吧.

    function check() {
    eval(String.fromCharCode(100, 101, 98, 117, 103, 103, 101, 114, 59))
    setTimeout(check, 1)
    }
    check()
    maplerecall
        16
    maplerecall  
       2024-04-27 19:23:34 +08:00   1
    如果只是按你说的需求就简单了,不用整什么花里胡哨的,直接绑 onresize 检查 UA ,如果变成包含 mobile 了就说明切换到手机模拟器了,因为正常情况下 UA 是不会变的。
    ochatokori
        17
    ochatokori  
       2024-04-27 19:59:10 +08:00 via Android
    css 媒体查询不就行了,搞这么复杂
    TaoLoading
        18
    TaoLoading  
    OP
       2024-04-27 20:00:11 +08:00
    @maplerecall 老哥牛批,原来这时候 UA 也会变,感谢解答
    drymonfidelia
        19
    drymonfidelia  
       2024-04-27 20:35:25 +08:00
    @TaoLoading 这种为什么不行,我们公司就在用这种方法,不过不是直接阻止用户操作网页而是往 cookies 里写风控标记
    drymonfidelia
        20
    drymonfidelia  
       2024-04-27 20:36:27 +08:00
    @drymonfidelia 19 指 11 楼 @yhxx 那种 toString 的方法
    drymonfidelia
        21
    drymonfidelia  
       2024-04-27 20:37:49 +08:00
    @drymonfidelia cookies 的风控标记会在下一个请求被风控系统识别入库,防止单独请求被用户注意到
    drymonfidelia
        22
    drymonfidelia  
       2024-04-27 20:45:49 +08:00
    @Chad0000 cloudflare 也在用这种方法写风控标记 turnslite 验证码如果开了控制台 100%不给通过
    bug51
        23
    bug51  
       2024-04-28 01:05:48 +08:00
    @jqtmviyu 容易把自己干死 无限 debugger
    TaoLoading
        24
    TaoLoading  
    OP
       2024-04-29 17:41:42 +08:00
    @drymonfidelia #20 我试了下新版 chrome 已经不好使了,你那新版 chrome 可以?
    TaoLoading
        25
    TaoLoading  
    OP
       2024-05-05 21:37:13 +08:00
    @drymonfidelia #21 你那边 toString() 方法在新版 chrome 好使不,我这测的不行呢
    drymonfidelia
        26
    drymonfidelia  
       2024-05-05 22:19:25 +08:00
    @TaoLoading 新版 chrome 确实不好使了,firefox 还可以稳定用,不过我们还有别的方法判断,不好公开
    TaoLoading
        27
    TaoLoading  
    OP
       2024-05-06 11:11:47 +08:00
    @drymonfidelia #26 ok ,我试了下可以通过打印大对象数组并计算时间差的方式来判断是否打开了 devtools ,亲测可行
    bronana
        28
    bronana  
       2024-05-14 15:41:09 +08:00
    最近在一个盗版资源网站上看到的源码
    ```html
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    <meta name="viewport" cOntent="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    </head>
    <body>
    <script>
    /*防扒*/
    (function () {
    var callbacks = [],
    timeLimit = 50,
    open = false;
    setInterval(loop, 1);
    return {
    addListener: function (fn) {
    callbacks.push(fn);
    },
    cancleListenr: function (fn) {
    callbacks = callbacks.filter(function (v) {
    return v !== fn;
    });
    },
    };

    function loop() {
    var startTime = new Date();
    debugger;
    if (new Date() - startTime > timeLimit) {
    if (!open) {
    callbacks.forEach(function (fn) {
    fn.call(null);
    });
    }
    open = true;
    window.stop();
    alert('小黑子,露出鸡脚了吧');
    window.location.reload();
    } else {
    open = false;
    }
    }
    })().addListener(function () {
    window.location.reload();
    });
    </script>
    </body>
    </html>

    ```
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1281 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 17:02 PVG 01:02 LAX 09:02 JFK 12:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86