zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    如何使用 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的对象原型继承(一)
    js相关小技巧
    一、WCF学习之旅-创建第一个服务
    .net WebService方法之重载、支持Session、支持request请求和response格式的浅析
    关于反射的BindingFlag浅析
    oracle之TRUNC函数
    start with...connect by子句的浅用
    一个在windows电脑上控制比较全的文件夹的设置方式
    javascript的replace之正则表达式的浅析
    抓取错误之onerror
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/13833003.html
Copyright © 2011-2022 走看看