[油猴脚本开发指南]破解鼠标移出限制实战
# 前言由于他人账号,无法提供具体网址,这节课主要跟大家聊一下思路,火狐浏览器我研究了一下没找到监听器,所以这节课用chrome浏览器的f12
# 目标
移除网页的鼠标移出检测
我们查看事件监听器
![图片.png](data/attachment/forum/202110/02/172515e411tg6hdtrc67hh.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
根据测试,是点击其他页面的时候触发停止消息。
查阅各个消息,我将其注意力放在了
![图片.png](data/attachment/forum/202110/02/172843zd8eldih6hmg8xd1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
上
https://developer.mozilla.org/zh-CN/docs/Web/API/Document/visibilitychange_event
visibilitychange
当其选项卡的内容变得可见或被隐藏时,会在文档上触发 `visibilitychange` (能见度更改)事件。
所以我们点击移除再进行测试一下
发现这时候移出检测依然存在。
所以这里我直接暴力测试了,对所有监听器进行逐个移除。
最后确定了blur监听器起到了检测屏幕移出的功能。
点击右边代码,发现了
![图片.png](data/attachment/forum/202110/02/173306qim3l66oy7so69wl.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
在你浏览其他窗口页面、或是浏览器最小化、又或是点击了其他程序等等,都算是浏览器窗口失去焦点,那么 **`window.onblur`** 事件就会触发。
当你浏览别的窗口或者别的程序,直接点就是当你的窗口失去焦点的时候,就会触发window.onblur
所以解决方法也非常简单
直接window.onblur=null;即可
经过测试解除成功!
# 后续
通过测试,发现最小化标签页依然会暂停,这里我们不得不怀疑上visibilitychange了。
我们直接移除visibilitychange事件,发现已经解除这个问题了。
这里证明是visibilitychange的问题,我们点击
![图片.png](data/attachment/forum/202110/02/173700ubn7s4xjxxx9n3xz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
进入源码
![图片.png](data/attachment/forum/202110/02/173737i2slyyuo62yyloy7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
下方有一个document.addEventListener函数,e是事件名,s是回调函数,这里我们跳到了s
根据之前的
![图片.png](data/attachment/forum/202110/02/173812ltj7hif8enn7a7bt.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
可以确定,事件名是visibilitychange,函数则是这个,这时候我们想到了之前学的addeventlistener事件劫持。
直接用代码邦邦上去就是两拳,顺便解决onblur
```javascript
let oldadd=EventTarget.prototype.addEventListener
EventTarget.prototype.addEventListener=function (...args){
if(window.onblur!==null){
window.onblur=null;
}
console.log('addEventListener',...args)
oldadd.call(this,...args)
}
```
然后刷新一下页面看输出,因为输出了一大堆addeventlistener的消息,所以这里我们过滤一下
![图片.png](data/attachment/forum/202110/02/174203nkykvoe3bwzd75vu.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
这里可以看到只有一个,所以我们直接写代码过滤!
```javascript
let oldadd=EventTarget.prototype.addEventListener
EventTarget.prototype.addEventListener=function (...args){
if(window.onblur!==null){
window.onblur=null;
}
if(args.length!==0&&args==='visibilitychange'){
console.log('劫持visibilitychange成功,奥利给!')
return;
}
return oldadd.call(this,...args)
}
```
跑一下测试看看
![图片.png](data/attachment/forum/202110/02/174410oll0dkseszr7eagr.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
发现提示了消息。
这时候再看事件监听器,发现不存在了blur监听器以及visibilitychange监听器,拿捏!
![图片.png](data/attachment/forum/202110/02/174422zbg5v12uvhvvzr1i.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
经过测试没有问题,我们已经成功破解鼠标移出限制。
终于找到一个addeventlistener实战例子,太难了... 李恒道 发表于 2021-10-2 17:48
终于找到一个addeventlistener实战例子,太难了...
能开前人未有之先河,别出机杼,自成一体,流传千古者,皆为大宗师 网站的js在我的油猴脚本执行前就添加了匿名事件怎么搞,劫持不了之前的事件了 pocoloco 发表于 2023-4-29 16:33
网站的js在我的油猴脚本执行前就添加了匿名事件怎么搞,劫持不了之前的事件了 ...
尝试上document-start试试 李恒道 发表于 2023-4-29 22:50
尝试上document-start试试
感谢!成功了
页:
[1]