李恒道 发表于 2022-6-10 23:42:03

[油猴脚本开发指南]油猴的本质以及document的处理(四)

# I函数分析
接下来我们执行到了I函数
![图片.png](data/attachment/forum/202206/10/233132sx4zrx3r6z4tnz1s.png)
这里太长就不截图了
s是document
i是固定值2
c是fileterEvent函数,具体作用不知道~
![图片.png](data/attachment/forum/202206/10/233145zvp7p07s1ppipx66.png)
我们一步一步往下走
首先声明了一个m函数
![图片.png](data/attachment/forum/202206/10/233233egvzldkv356eaqo3.png)
然后执行
![图片.png](data/attachment/forum/202206/10/233323jy9h2yyg8syjqhz8.png)
其中b是forEach函数
而T是一个数组
内包含
![图片.png](data/attachment/forum/202206/10/233344dvf1bcrdfdk000dd.png)
回调则是
e=>{
      e.object === s && (l = !0)
    }
这里说实话意义不明,但是我们大概知道了T包含了addeventlistener等函数
然后我们通过常量l保存了document,以及addEventListener函数以及removeEventListener函数
![图片.png](data/attachment/forum/202206/10/233651qpsu73ve0pei3tlp.png)
然后执行C函数
![图片.png](data/attachment/forum/202206/10/233802v0i2007s044yk0kt.png)
根据结果可知
将油猴的函数和原生函数分别堆到了数组内,代理在前,原生在后
![图片.png](data/attachment/forum/202206/10/233835vn4b4bdxepbaie15.png)
然后声明了一个数组一个函数
![图片.png](data/attachment/forum/202206/10/233906h6ov6uuv61bmh1m7.png)
重头来了,对document的removeEventListener进行了劫持
![图片.png](data/attachment/forum/202206/10/233925bfe6jtdv0jcm69ak.png)
然后声明一个w函数
![图片.png](data/attachment/forum/202206/10/233950cnb8d8asy1s87d7e.png)
再对document的addEventListener进行劫持
![图片.png](data/attachment/forum/202206/10/234001janozpn8a8wtjh9t.png)
这里是劫持后的函数的tostring进行劫持,让其返回native code,装作是原来的函数
![图片.png](data/attachment/forum/202206/10/234045fitcikmvkt1vzfkj.png)
那么我们的I函数就执行完了
# I函数总结
对addEventListener以及removeEventListener进行了复写
# 结语
太长,继续撒花
页: [1]
查看完整版本: [油猴脚本开发指南]油猴的本质以及document的处理(四)