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>