js hook代码


<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <div>
        <input type="button" value="点击按钮" onclick="test1()" />
    </div>

    <script type="text/javascript">
        function test1(name) {
            var nv = window.navigater;
            console.log("test1 appName " + nv.appName);
            console.log("test1 appCodeName " + nv.appCodeName);
            console.log("test1 platform " + nv.platform);
        }
        
        var mynv = {
            appName:'张三',
            appCodeName:'李四',
            platform:'王五'
        };
        
        Object.defineProperty(window, 'navigater', {
          get: function() {
            console.log("get navigater");
            
            return mynv;
          }
        });
        
        var o = {}; // 创建一个新对象

        // 在对象中添加一个属性与数据描述符的示例
        Object.defineProperty(o, "a", {
          value : 37,
          writable : true,
          enumerable : true,
          configurable : true
        });

        // 对象 o 拥有了属性 a,值为 37

        // 在对象中添加一个设置了存取描述符属性的示例
        var bValue = 38;
        Object.defineProperty(o, "b", {
          // 使用了方法名称缩写(ES2015 特性)
          // 下面两个缩写等价于:
          // get : function() { return bValue; },
          // set : function(newValue) { bValue = newValue; },
          get() { return bValue; },
          set(newValue) { bValue = newValue; },
          enumerable : true,
          configurable : true
        });

        console.log("o.b " + o.b);
        
        // 重写 console.log 函数
        let flag = false;
        console.log = function (base) {
            return function () {
                var arr = new Array("hooked");
                base.apply(this, arr);
                !flag && base.apply(this, arguments);
            }
        }(console.log);
        
        let test = {
            name: "小红"
        };
        test = new Proxy(test, {
            get(target, key) {
              console.log('获取了getter属性');
              return target[key];
            }
        });
        console.log(test.name);
    </script>
</body>
</html>

 

 

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>    <meta charset="utf-8" />    <title></title></head><body>    <div><input type="button" value="点击按钮" onclick="test1()" />    </div>
    <script type="text/javascript">        function test1(name) {var nv = window.navigater;console.log("test1 appName " + nv.appName);console.log("test1 appCodeName " + nv.appCodeName);console.log("test1 platform " + nv.platform);        }var mynv = {appName:'张三',appCodeName:'李四',platform:'王五'};Object.defineProperty(window, 'navigater', {  get: function() {console.log("get navigater");return mynv;  }});var o = {}; // 创建一个新对象
// 在对象中添加一个属性与数据描述符的示例Object.defineProperty(o, "a", {  value : 37,  writable : true,  enumerable : true,  configurable : true});
// 对象 o 拥有了属性 a,值为 37
// 在对象中添加一个设置了存取描述符属性的示例var bValue = 38;Object.defineProperty(o, "b", {  // 使用了方法名称缩写(ES2015 特性)  // 下面两个缩写等价于:  // get : function() { return bValue; },  // set : function(newValue) { bValue = newValue; },  get() { return bValue; },  set(newValue) { bValue = newValue; },  enumerable : true,  configurable : true});
console.log("o.b " + o.b);// 重写 console.log 函数let flag = false;console.log = function (base) {return function () {var arr = new Array("hooked");base.apply(this, arr);!flag && base.apply(this, arguments);}}(console.log);let test = {name: "小红"};test = new Proxy(test, {get(target, key) {  console.log('获取了getter属性');  return target[key];}});console.log(test.name);    </script></body></html>

posted @ 2021-09-06 17:29  Supper_litt  阅读(118)  评论(0编辑  收藏  举报