
有个需求需在不引入库的情况下判断用户打开了 F12 控制台,而且要做到多浏览器兼容,大佬们有合适的办法吗
1 gorira 2024-04-27 12:36:00 +08:00 联合十部委出台相关规定,使用控制台查看本站信息违反网络安全法 |
2 ktqFDx9m2Bvfq3y4 2024-04-27 12:40:06 +08:00 via iPhone 玩这种黑魔法没意思,双输。 |
3 JK9993 2024-04-27 12:46:17 +08:00 复制一下源码? |
4 TaoLoading OP @Chad0000 不是呀,我在做浏览器插件开发,期望当检测到用户开启开发者控制台并选择移动端样式后隐藏我的插件,也是优化用户体验 |
5 zcf0508 2024-04-27 12:59:51 +08:00 via Android @TaoLoading 那你直接移动端样式兼容就好了,为啥要判断是不是开了控制台 |
6 TaoLoading OP @zcf0508 因为这个插件是全平台兼容的,也有移动端 |
7 estk 2024-04-27 13:17:48 +08:00 via iPhone 淘宝的 f12 是招聘内容 |
8 bgm004 2024-04-27 13:48:14 +08:00 via Android 不用第三方库你不还是要自己写,有什么区别? |
9 agagega 2024-04-27 13:53:10 +08:00 via iPhone 以前在本站看到过一个人贴了个特牛逼的网页,阻止用户打开控制台,标题忘了,可以搜搜 |
10 yhxx 2024-04-27 15:21:08 +08:00 不引入库是啥意思 找个库把它的代码复制一份算引入库吗 |
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 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 |
12 TaoLoading OP @Track13 点就是在这,引入库会让插件变大,性能较差 |
13 TaoLoading OP @yhxx #11 这种重写 toString() 的方法已经不行了 |
14 bgm004 2024-04-27 17:41:45 +08:00 via Android @TaoLoading 插件大不等于性能差。 |
15 jqtmviyu 2024-04-27 19:12:11 +08:00 用 debugger 糊弄下吧. function check() { eval(String.fromCharCode(100, 101, 98, 117, 103, 103, 101, 114, 59)) setTimeout(check, 1) } check() |
16 maplerecall 2024-04-27 19:23:34 +08:00 如果只是按你说的需求就简单了,不用整什么花里胡哨的,直接绑 onresize 检查 UA ,如果变成包含 mobile 了就说明切换到手机模拟器了,因为正常情况下 UA 是不会变的。 |
17 ochatokori 2024-04-27 19:59:10 +08:00 via Android css 媒体查询不就行了,搞这么复杂 |
18 TaoLoading OP @maplerecall 老哥牛批,原来这时候 UA 也会变,感谢解答 |
19 drymonfidelia 2024-04-27 20:35:25 +08:00 @TaoLoading 这种为什么不行,我们公司就在用这种方法,不过不是直接阻止用户操作网页而是往 cookies 里写风控标记 |
20 drymonfidelia 2024-04-27 20:36:27 +08:00 @drymonfidelia 19 指 11 楼 @yhxx 那种 toString 的方法 |
21 drymonfidelia 2024-04-27 20:37:49 +08:00 @drymonfidelia cookies 的风控标记会在下一个请求被风控系统识别入库,防止单独请求被用户注意到 |
22 drymonfidelia 2024-04-27 20:45:49 +08:00 @Chad0000 cloudflare 也在用这种方法写风控标记 turnslite 验证码如果开了控制台 100%不给通过 |
24 TaoLoading OP @drymonfidelia #20 我试了下新版 chrome 已经不好使了,你那新版 chrome 可以? |
25 TaoLoading OP @drymonfidelia #21 你那边 toString() 方法在新版 chrome 好使不,我这测的不行呢 |
26 drymonfidelia 2024-05-05 22:19:25 +08:00 @TaoLoading 新版 chrome 确实不好使了,firefox 还可以稳定用,不过我们还有别的方法判断,不好公开 |
27 TaoLoading OP @drymonfidelia #26 ok ,我试了下可以通过打印大对象数组并计算时间差的方式来判断是否打开了 devtools ,亲测可行 |
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> ``` |