挖掘机小王子 发表于 2021-12-29 17:27:31

cxxjackie 发表于 2021-9-10 21:26
其实只要记住一个通用的公式就好了:XXX是原函数,劫持函数的时候把这句放进去,基本错不了。 ...

ggnb!ggnb!ggnb!

琦玉 发表于 2023-4-6 22:03:46

大佬能再详细讲一下吗?

李恒道 发表于 2023-4-6 23:05:08

琦玉 发表于 2023-4-6 22:03
大佬能再详细讲一下吗?

具体哪部分没理解
这个其实就是常规的hook过滤,来搞事件

琦玉 发表于 2023-4-7 15:35:14

李恒道 发表于 2023-4-6 23:05
具体哪部分没理解
这个其实就是常规的hook过滤,来搞事件

谢谢大佬,我自己研究了下也搞明白了。

Class 发表于 2023-10-17 19:40:17

本帖最后由 Class 于 2023-10-17 19:43 编辑

@李恒道

新人小白求教,首先先感谢作者大大的教程,csdn、抖音等页面成功劫持了

但油管刷新页面,过了一段时间,检测到去广告扩展时,阻止滚动的wheel、scroll事件才开始绑定上

阻止滚动的有两个,都在`desktop_polymer_enable_wil_icons.js`这个js中:

1. scroll事件:

__onCaptureScroll: function(a) {
            if (!(this.__isAnimating || 0 <= Hw(a).path.indexOf(this)))
                switch (this.scrollAction) {
                case "lock":
                  this.__restoreScrollPosition();
                  break;
                case "refit":
                  this.__deraf("refit", this.refit);
                  break;
                case "cancel":
                  this.cancel(a);
                }
      },
2. wheel事件:

    function _scrollInteractionHandler$$module$third_party$javascript$youtube_components$tp_yt_iron_overlay_behavior$tp_yt_iron_scroll_manager(a) {
      a.cancelable && _shouldPreventScrolling$$module$third_party$javascript$youtube_components$tp_yt_iron_overlay_behavior$tp_yt_iron_scroll_manager(a) && a.preventDefault();
      a.targetTouches && (a = a.targetTouches,
      hJb = a.pageX,
      iJb = a.pageY)
    }


像这种情况该如何处理呢

cxxjackie 发表于 2023-10-17 22:34:08

Class 发表于 2023-10-17 19:40
@李恒道

新人小白求教,首先先感谢作者大大的教程,csdn、抖音等页面成功劫持了


跟过一段时间没关系吧,只要一直保持劫持肯定能抓到,问题主要在判断是哪个事件上了,对函数做toString处理是比较简单的,对比某些特征代码就可以筛选出来:
EventTarget.prototype.addEventListener = function(...args) {
    console.log(args.toString())
    oldadd.call(this,...args)
}

Class 发表于 2023-10-18 10:09:36

本帖最后由 Class 于 2023-10-18 11:02 编辑

cxxjackie 发表于 2023-10-17 22:34
跟过一段时间没关系吧,只要一直保持劫持肯定能抓到,问题主要在判断是哪个事件上了,对函数做toString处 ...
谢谢大佬回复❤

依旧无法劫持,这段代码有啥问题吗
```js

if (document.URL.includes('youtube.com/watch')) {
    const oldAdd = EventTarget.prototype.addEventListener;
    const targetArray = ['a.targetTouches','this.__restoreScrollPosition();'];

    EventTarget.prototype.addEventListener = function (type, eventListener, options) {
      const eventListenerString = eventListener.toString();
      if (type === 'wheel' || type === 'scroll') {
      console.log(eventListenerString)
      if (targetArray.some(target => eventListenerString.includes(target))) {
          console.warn('劫持成功');
          return;
      }
      }
      return oldAdd.call(this, type, eventListener, options);
    };
}

```
_scrollInteractionHandler$$module$third_party$javascript$youtube_components$tp_yt_iron_overlay_behavior$tp_yt_iron_scroll_manager 函数

__onCaptureScroll 函数


都没有被打印出来

cxxjackie 发表于 2023-10-19 22:35:45

Class 发表于 2023-10-18 10:09
谢谢大佬回复❤

依旧无法劫持,这段代码有啥问题吗


我没在油管页面测试过,要翻墙太麻烦了,这种情况我猜测可能有2个原因:
1、绑定事件的时机过早,可能早于你的脚本执行时机,虽然跟你的描述不符,但最好还是再检查一下。
2、存在iframe框架,事件绑在iframe内部了,而你在外部劫持所以没获取到,需要将脚本match进iframe内才能成功。

dawnl-lc 发表于 2023-11-6 02:05:28

wjy0 发表于 2021-9-11 10:30
hook addeventlistener想不到有什么应用场景

对一些用各类框架开发的网站有奇效,反正那些框架也是通过addeventlistener来实现功能,用hook直接抢在框架前干活,我的脚本就有用到。
页: 1 2 [3]
查看完整版本: [油猴脚本开发指南]addEventListener劫持