cxxjackie 发表于 2021-9-10 21:26
其实只要记住一个通用的公式就好了:XXX是原函数,劫持函数的时候把这句放进去,基本错不了。 ...
ggnb!ggnb!ggnb!
大佬能再详细讲一下吗?
琦玉 发表于 2023-4-6 22:03
大佬能再详细讲一下吗?
具体哪部分没理解
这个其实就是常规的hook过滤,来搞事件
李恒道 发表于 2023-4-6 23:05
具体哪部分没理解
这个其实就是常规的hook过滤,来搞事件
谢谢大佬,我自己研究了下也搞明白了。
本帖最后由 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)
}
像这种情况该如何处理呢
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 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 函数
都没有被打印出来
Class 发表于 2023-10-18 10:09
谢谢大佬回复❤
依旧无法劫持,这段代码有啥问题吗
我没在油管页面测试过,要翻墙太麻烦了,这种情况我猜测可能有2个原因:
1、绑定事件的时机过早,可能早于你的脚本执行时机,虽然跟你的描述不符,但最好还是再检查一下。
2、存在iframe框架,事件绑在iframe内部了,而你在外部劫持所以没获取到,需要将脚本match进iframe内才能成功。
wjy0 发表于 2021-9-11 10:30
hook addeventlistener想不到有什么应用场景
对一些用各类框架开发的网站有奇效,反正那些框架也是通过addeventlistener来实现功能,用hook直接抢在框架前干活,我的脚本就有用到。