如何使用 js 检测控制台被用户打开了

js

solutions

  1. 监听 F12 事件

  1. 监听键盘快捷键组合

Ctrl + Shift + I

Option + Command + I


  1. Object.toString()

如果控制台输出的是对象,则保留对象的引用,每次打开开发者工具的时候都会重新调用一下对象的 toString()方法将返回结果打印到控制台(console tab)上。


  1. 监听 window 的纵横比的变化

  1. debugger 断点
"use strict";

/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-10-01
* @modified
*
* @description
* @difficulty Easy Medium Hard
* @complexity O(n)
* @augments
* @example
* @link
* @solutions
*
* @best_solutions
*
*/ // const log = console.log; function FBIWarning() {
console.warn(`控制台被打开了`);
console.error(`控制台被打开了`);
} // ??? !function
!function () {
const id = setInterval(() => {
const before = new Date().getTime();
debugger;
const after = new Date().getTime();
if (Math.abs(after - before) > 100) {
FBIWarning();
clearInterval(id)
}
}, 1000);
}();
  1. Proxy 拦截 log 执行

  1. 数据劫持

"use strict"; /**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-10-01
* @modified
*
* @description
* @difficulty Easy Medium Hard
* @complexity O(n)
* @augments
* @example
* @link
* @solutions
*
* @best_solutions
*
*/ // const log = console.log; let times = 1; var abc = document.createElement('div'); Object.defineProperty(abc, `id`, {
// 数据劫持
get: function () {
// console.log(`控制台被打开了`, x);
console.warn(`控制台被打开了`, times);
console.error(`控制台被打开了`, times);
times++;
},
// others
}); console.log(abc);

应用场景

禁用右键菜单

防止执行外包的 js, 关闭当前页面

重定向

禁用复制

refs

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent

快捷键

https://www.cnblogs.com/xgqfrms/tag/快捷键/


let isCtrl = false;
document.addEventListener("keyup", () => {
//
});
document.addEventListener("keyup", function(e) {
let key = e.which || e.keyCode;
// console.log(`keyup & e =`, e);
// console.log(`e.keyCode =`, e.keyCode);
// console.log(`e.which =`, e.keyCode);
// console.log(`key =`, key);
if(e.which === 17) {
// init
isCtrl = false;
}
});
document.addEventListener("keydown", function(e) {
let key = e.which || e.keyCode;
console.log(`keydown & e =`, e);
// console.log(`e.keyCode =`, e.keyCode);
// console.log(`e.which =`, e.keyCode);
// console.log(`key =`, key);
if(e.which === 17) {
isCtrl = true;
}
if(e.which === 83 && isCtrl === true) {
console.log(`you pressed Ctrl + S`);
}
if(e.which === 68 && isCtrl === true) {
console.log(`you pressed Ctrl + D`);
}
if(e.which === 70 && isCtrl === true) {
console.log(`you pressed Ctrl + F`);
}
if(e.which === 88 && isCtrl === true) {
console.log(`you pressed Ctrl + X`);
}
});
// document.onkeyup = function(e) {
// if(e.which === 17) {
// isCtrl = false;
// }
// }
// document.onkeydown = function(e) {
// if(e.which === 17) {
// isCtrl = true;
// }
// if(e.which === 83 && isCtrl === true) {
// // alert('Keyboard shortcuts are cool!');
// return false;
// }
// }


xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


如何使用 js 检测控制台被用户打开了的更多相关文章

  1. 爬虫笔记之JS检测浏览器开发者工具是否打开

    在某些情况下我们需要检测当前用户是否打开了浏览器开发者工具,比如前端爬虫检测,如果检测到用户打开了控制台就认为是潜在的爬虫用户,再通过其它策略对其进行处理.本篇文章主要讲述几种前端JS检测开发者工具是 ...

  2. Android判断GPS是否开启和强制帮用户打开GPS

    引子:在我们的应用为用户提供定位服务时,通常想为用户提供精确点的定位服务,这是需要用户配合的.我们必须先检测用户手机的GPS当前是否打开,若没打开则弹出对话框提示.用户若不配合我们也没办法,只能采用基 ...

  3. 使用device.js检测设备并实现不同设备展示不同网页

    现在很多时候会用@media来控制页面在不同分辨率的设备商展示不同效果,但是有些时候想在直接在PC上展示一个做好的页面,在mobile展示另一个页面.这个时候可以借助device.js来检测设备,然后 ...

  4. 禁止用户打开HTML页面调试

    有些时候,我们可能想要禁止用户修改或者调试我们HTML页面的代码,这个时候需要组织用户打开调试窗口,下面介绍一些能够阻止用户在浏览器中打开调试窗口的方法,这些方法只能一定程度的提高打开调试的门槛,并不 ...

  5. Node.js 使用JWT进行用户认证

    代码地址如下:http://www.demodashi.com/demo/13847.html 运行环境 该项目基于 node(v7.8.0版本以上) 和 mongodb 数据库,因此电脑上需要安装这 ...

  6. js 检测屏幕分辨率

    js 检测屏幕分辨率 class screenChecker { constructor() { this.screen = window.screen; this.fullscreen = fals ...

  7. 如何使用 js 检测页面上全局变量

    如何使用 js 检测页面上全局变量 js 检测页面全局变量脚本 <!DOCTYPE html> <html lang="zh-Hans"> <head ...

  8. 通过JS检测360浏览器

    如何通过JS检测360浏览器? 尝试了一大堆方法,网上大多数办法都是通过navigator.userAgent来判断,这可能在几年前是行得通的,现在360userAgent输出来跟谷歌除了版本号其余一 ...

  9. 通过js检测到iframe,使父窗口重定向到index -----------???----------------------

    通过js检测到iframe,使父窗口重定向到index -----------???---------------------- 如果本身已将在iframe中,那么重定向的页面应该直接添加到父级ifr ...

随机推荐

  1. Connection Manager简称connman

    ConnMan    Connection Manager简称connman,connman是使用d-bus做为进程间通信机制来管理Linux网络链接的一种软件.在connman的d-bus接口中,有 ...

  2. HTTP/1HTTP/2HTTP/3

    https://mp.weixin.qq.com/s/fy84edOix5tGgcvdFkJi2w

  3. FFT,NTT 笔记

    FFT 简介 FFT是干啥的?它是用来加速多项式乘法的.我们平时经常求多项式乘法,比如\((x+1)(x+3)=(x^2+4x+3)\).假设两个式子都是\(n\)项(不足的补0),那朴素的算法是\( ...

  4. 如何手动封装Promise函数

    第一步:Promise构造函数接受一个函数作为参数,该函数的两个参数分别是:resolve和reject; function Promise(task) { // 缓存this let that = ...

  5. MySql(一)表类型(存储引擎)

    MySql(一)表类型(存储引擎) 一.MYSQL存储引擎概述 二.存储引擎的特性对比 2.1 MyISAM 2.2 InnoDB 2.2.1 自动增长列 2.2.2 外键约束 2.2.3 存储方式 ...

  6. SpringBoot-文件系统-Excel,PDF,XML,CSV

    SpringBoot-文件系统-Excel,PDF,XML,CSV 1.Excel文件管理 1.1 POI依赖 1.2 文件读取 1.3 文件创建 1.4 文件导出 1.5 文件导出接口 2.PDF文 ...

  7. JavaWeb——Servlet开发

    什么是Servlet? Servlet运行的过程 Servlet的生命周期 生命周期的各个阶段 Servlet的配置 使用Web.xml配置 使用注解配置 Servlet相关接口 ServletCon ...

  8. Java——接口、匿名类

    接口语法 public interface Demolnteface{ public void demo(): //其他方法 //所有方法都是抽象的 } 接口里放: 1.静态常量 (一般全部大写) 2 ...

  9. 洛谷P4719 【模板】"动态 DP"&动态树分治

    [模板]"动态 DP"&动态树分治 第一道动态\(DP\)的题,只会用树剖来做,全局平衡二叉树什么的就以后再学吧 所谓动态\(DP\),就是在原本的\(DP\)求解的问题上 ...

  10. poj3757 Training little cats

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11496   Accepted: 2815 Description Face ...