李恒道 发表于 2021-8-28 01:17:04

cxxjackie 发表于 2021-8-25 21:22
我还是不喜欢Proxy这种劫持整个对象的做法,效率问题先放一边,看你的代码逻辑也显得非常复杂。像这个 ...
大概调试了一下,我返回的明明是proxy对象,不知道什么鬼,网页能拿到proxy代理之前的对象进行访问,日
我没怎么用过fetch
按道理xhr很难有人没事去挂载属性
但是fetch为什么还可以当存储对象存一堆乱七八糟玩应???
这个哥哥知道么

cxxjackie 发表于 2021-8-28 08:41:21

李恒道 发表于 2021-8-28 01:17
大概调试了一下,我返回的明明是proxy对象,不知道什么鬼,网页能拿到proxy代理之前的对象进行访问,日
我 ...

我没怎么用过Proxy,所以你说的问题我也不太了解,试着调试了一下,你说的属性获取不到应该是Reflect.get在获取function时没有处理this指向导致的,相当于我的代码里用oldJson保存response.json,如果直接调用oldJson()肯定是不行的。

```javascript
let handler = {
    get: function(target, prop, receiver) {
      if (prop in target) {
            if (prop === 'json') {
                return () => Promise.resolve({ a: 6, b: 6, c: 6 });
            } else {
                let getter = Reflect.get(target, prop);
                if (typeof getter === 'function') {
                  getter = getter.bind(target);
                }
                return getter;
            }
      }
    }
};
let proxy = new Proxy(response, handler);
```

这样就可以成功改变json的结果,也不影响其他属性的读取(其实我也不理解你的Proxy里面为什么还要再套一层Proxy)。如果要先等json出结果,在原数据的基础上修改,那可能还是要嵌套Promise,思路就跟我前面的代码一样了。或许Proxy在处理Promise上有更好的做法?这方面我是真的不了解,就不乱说了。

李恒道 发表于 2021-8-28 14:20:56

cxxjackie 发表于 2021-8-28 08:41
我没怎么用过Proxy,所以你说的问题我也不太了解,试着调试了一下,你说的属性获取不到应该是Reflect ...
一开始是想对所有函数做个通用劫持然后改变指向
然后发现网页好像会对fetch挂载函数然后返回this???
但是xhr目前没碰到过这个问题

有些网页玩这种骚操作导致我的proxy过滤直接gg了
哥哥你的方式劫持我晚上试试

李恒道 发表于 2021-8-28 14:21:32

cxxjackie 发表于 2021-8-28 08:41
我没怎么用过Proxy,所以你说的问题我也不太了解,试着调试了一下,你说的属性获取不到应该是Reflect ...

计算机太难了,我日

cxxjackie 发表于 2021-8-28 14:33:41

李恒道 发表于 2021-8-28 14:20
一开始是想对所有函数做个通用劫持然后改变指向
然后发现网页好像会对fetch挂载函数然后返回this???
但 ...

是因为你的Proxy挂在response上了吧,fetch本身没有被劫持,不过fetch是个函数,函数能被Proxy代理吗?这我就不了解了,xhr是因为本身是个对象,代理的时候整个都被劫持了。

脚本体验师001 发表于 2021-8-28 14:49:30

李恒道 发表于 2021-8-28 14:21
计算机太难了,我日

纯小白发表感慨,纵观见到的网页,哪家网页会老老实实的一个功能写成一个函数,全他娘的碎片化,里面各种骚操作。一个小小事项都能分到几个js文件里。我们想用最短的代码去做最多的事情,难度可想而知。加油。。。

李恒道 发表于 2021-8-28 17:25:36

cxxjackie 发表于 2021-8-28 14:33
是因为你的Proxy挂在response上了吧,fetch本身没有被劫持,不过fetch是个函数,函数能被Proxy代理吗?这 ...

确定问题了
网页使用fetch返回的response对象
如果我对这个对象形成Proxy对象后
网页通过一些步骤可以获取到Proxy代理之前的对象,然后写入写出数据
直接对reponse代理就没问题了
但是代理方法绝对可以确定是不可靠的了
谢谢哥哥了
哥哥牛逼!

cxxjackie 发表于 2021-8-28 20:33:09

李恒道 发表于 2021-8-28 17:25
确定问题了
网页使用fetch返回的response对象
如果我对这个对象形成Proxy对象后


我也不太理解为什么你要用一个新对象包住response再去Proxy新对象的做法,还有 prop+'proxy' 这种看起来很别扭的做法真的有必要吗?Reflect.get(target, prop)这里的target指向的是原对象吧,而Proxy是在劫持后的对象上操作的(按我的理解Proxy的本质是对象的深拷贝,这也是导致性能问题的主要原因,不知道对不对),receiver才是被劫持后的对象,直接取target是完全没有问题的吧,为什么你还要再套一层Proxy进去把问题复杂化呢?这样做有什么特别的意义吗?

李恒道 发表于 2021-8-28 21:08:47

cxxjackie 发表于 2021-8-28 20:33
我也不太理解为什么你要用一个新对象包住response再去Proxy新对象的做法,还有 prop+'proxy' 这种看起来 ...
没错!哥哥提的这两点都是我脑子进水了搞的,最近几天修正一下

李恒道 发表于 2021-8-30 10:04:22

cxxjackie 发表于 2021-8-28 20:33
我也不太理解为什么你要用一个新对象包住response再去Proxy新对象的做法,还有 prop+'proxy' 这种看起来 ...

哥哥,话说哥哥有没有写过什么有意思的脚本,想嫖一下代码看看骚操作
页: 1 [2] 3 4
查看完整版本: [油猴脚本开发指南]理解fetch劫持