起因是某个智慧教育网站看视频不能倍速了(
原本倍速好好的结果突然就不行了(
初步分析
首先发现倍速调高了之后会出现弹窗提示不要倍速
直接搜了一遍 js,并没有,那说明代码可能是 eval 出来的,从其他地方切入吧
然后发现,弹窗了之后会把视频直接暂停,那么这个可以作为一个切入点。
直接下 media breakpoint 在 pause 上面
然后调高倍速,果不其然断了下来
查看一下函数堆栈,然后可以发现关键位置
这个 Me 函数是通过一个已经记录的视频播放的位置,然后通过系统时间减掉来判断真实的倍速,非常基础的一个反倍速。但是是在 eval 出来的代码里面,所以没法直接修改,我们继续看
下面的地方能找到 Fe 函数
整个网页是 React + Webpack,所以这个地方的 createElement 事实上是 React 的函数
然后把这个 check 函数给了这个 element
Patching
我最初的思路是拿个油猴去 hook 一下这个 createElement
但是好像不是很好拿到这个对象哎
所以我最后看了一下函数调用栈
发现这个 check 是以一个 Interval 运行的
但是这个 setInterval 是 webpack 生成的,不是系统那个
所以直接改就完事了
然后发现好像倍速太高了会触发另一个地方的 check
就是直接给拉回了,所以这个地方也需要 patch 一下,直接不让他搞小动作就可以了
正文完