前言
有没有读者和作者一样,在满心欢喜的打开 UP 主的动态希望可以开心干饭时,却发现 UP 发布的是一个广告?例如:
有没有办法可以去掉这些广告呢?
本来将通过一个案例分享如何利用油猴脚本增强网站体验(为所欲为),让我们开始吧!
什么是油猴脚本
油猴脚本(Tampermonkey)是一种浏览器扩展,用于在网页上运行自定义的用户脚本。这些脚本可以修改网页的行为和外观,以增强用户体验或实现特定功能。油猴脚本通常用于自动化任务、屏蔽广告、修改网页样式等。它支持多种浏览器,如Chrome、Firefox、Safari等。
分析案例
通过查看控制台,我们发现 Feed 流是调用的这个接口: /x/polymer/web-dynamic/v1/feed/al:
通过进一步分析,我们看到 Feed 中的数据结构如下:
思路分析
一个非常直观的思路即,过滤掉非视频元素 ('DYNAMIC_TYPE_AV'(视频类型))。
另外,我们观察到,这个接口的调用是利用的
xhr,而不是 fetch。
那么一个非常直观的思路就是,劫持 xhr,通过判断调用地址定位到 Feed 流接口,手动过滤掉非视频元素。
为了避免造轮子,我们发现一个非常好用的库 github.com/jpillora/xh… ,使用也非常简单:
但是我们发现如果直接引用 xhook 脚本到油猴脚本中,并不起作用。原因是油猴脚本需要使用者手动调用
unsafeWindow 而不是 window。
而在 xhook 脚本中,劫持 XMLHttpRequest 时使用的是 window。
所以我们无法直接加载 xhook 的脚本,那么我们索性全库引用,然后传入 unsafeWindow 作为代码中 window 的真正引用。
- 我们增加了 window 作为 xhook 这个函数的参数
- 我们传入了 unsafeWindow 作为真正的 window 的引用
这样我们完成了加载 xhook 的功能。
核心实现
核心逻辑非常简单直白,作者就不做额外的说明了。代码仓库在 github.com/xiaoyu2er/b…
额外说明
油猴脚本需要一系列的指令来让油猴扩展了解脚本的元信息,以本脚本为例:
- line-7 表明这个脚本是需要在 t.bilibili.com 域名下才需要启动
- line-8 表明这个脚本需要使用
unsafeWindow - line-11 表明这个脚本的更新地址
- line-12 表明这个脚本的执行是在 document-start 因为我们需要修改 xhr 的定义,所以这个时机应该在页面逻辑执行前就完成
效果展示
我们首先需要安装油猴的扩展,然后打开我们的油猴脚本,github.com/xiaoyu2er/b… 点击 Raw 就会触发油猴扩展,然后我们点击安装(或者更新)
当我们安装了油猴脚本之后,再次打开哔哩哔哩 Feed 页面:
我们发现油猴扩展有一个脚本正在运行,而且 Feed 页面已经没有广告了!让我们开心的干饭吧!
脑洞大开
好了,一个让哔哩哔哩体验更好的脚本就完成了,思路打开,我们可以使用油猴脚本做非常多的事情,剩下的就交给读者吧!