//第一种 补环境的方法 let test1 = { name:"小红" }; test = new Proxy(test1,{ get(target,key){ console.log("获取了",key + "属性"); return target[key]; } }) test.name //实战应用(注释部分的内容倒着看) //然后继续代理,按照这种的思路。继续的寻找,不但代理对象,获取里面的属性或者方法。然后检测其返回值。 //特点是每次只能检测一个,所以,补完每一个级别的对象之后,都需要重新的进行检测 canvas = {} let document = { createElement:function (val) { if (val = "canvas"){ return canvas //到浏览器中看一看需要输入哪些内容 } } }; //返回的是一个document对象,那么就设置一个空对象,看一看从这个空对象里面取了哪些值 //找到确是环境中缺失的属性之后,然后再函数中不传参数,但是打印参数。通过这样的方式来获取环境中使用的参数 // let document = { // createElement:function () { // console.log(arguments) // } // }; document = new Proxy(document,{ get(target,key){ console.log("获取了",key + "属性"); return target[key]; } }) document.createElement() //就可以检测这里面调用了document中的哪些属性 //进阶的使用 //吐环境 function proxy(proxy_array){ for(let i = 0;i<proxy_array;i++){ eval(proxy_array[i] + ' = new Proxy(' + proxy_array[i] + ',{ ' + 'get(target,key){ ' + 'debugger;' + 'console.log("====================")'+ 'console.log("获取了",'+ proxy_array[i] + ' 的key属性"); ' + 'console.log("====================")'+ 'return target[key]; }') } } //常用的proxy_array var proxy_array = ["window","document","location","navigator"] proxy(proxy_array) //如果需要补XMLHttpRequest、ActiveXObject,直接给空对象不用管 //可以用typeof 判断数据类型 //第二种补环境的方法 //代码可以混淆的部分 形参、实参、变量名等可以变的东西 //最终的结果不会混淆 //所以,规避代码中的变量名和方法。需要补的内容是浏览器中有的东西,而不是代码中有的东西 //所以动态的代码,通过补环境是一个很好的方法 //检测音频指纹的代码 //等待页面加载后的调用 //this 改写成that 然后写一个定时器。然后就可以实现自动的执行