AdBlockPlus-爱奇艺广告显示被拦截黑屏的解决思路
AdBlockPlus是一块非常好用的广告拦截插件。亦或者市面上其他常见的广告拦截工具,相信很多人都使用过。但凡使用过这些广告拦截的朋友在看爱奇艺的时候都有遇到过上面这种情况,出现广告被拦截的黑屏提示,并等待几十秒的时间。恰好我也遇到了这种情况,谷歌了一下好像没有人提出解决思路。于是调试了下爱奇艺的js,顺利解决了该问题,简单分享一下我的思路。
在开启AdBlockPlus插件后,爱奇艺随便播放一个视频。
黑屏上的数字会不断递减,直到结束才会开始播放视频。此时打开控制台,搜索被拦截关键字。
跳转到sources面板,此时断在mars_v.js的3183行上。
把光标放在i.innerText上会显示当前的值,和黑屏上显示的数值是一样的,代表当前剩余等待的时间。按esc调出console,改变t或者r.currentCount的值让等待的时间变化验证猜想确实可行。
总等待的时间t是45s,我们将r.currentCount改为40,也就是黑屏的时间会变为5s。
此时如我们所料,黑屏时间变为5s。
几秒结束后视频开始正常播放,也就说明确实行之有效。设想我们直接把该改为0那么黑屏不就直接没有了吗。但是我们不能每次都下断点来修改值啊。虽然这里有很多其他的方式来修改,比如45s的时间是固定的。
chrome可以映射替换js文件,不过杀鸡焉用牛刀。通过浏览这一整个js的代码,发现整个js所做的事情都是和广告被拦截后的操作。所以我索性直接把这个js给禁止掉不就行了吗?
如何禁止浏览器加载某个文件呢?小伙伴最先想到的可能是
通过这种方式禁止url请求是不行的,因为每次请求后面都带了随机数所以并不能生效。正确的方式是在chrome的network request blocking的面板中,将这个js的url后面带上一个星号,也就是可以使用通配符。
这样就可以禁止这个js文件的加载了。不过这里还有一个问题,就是这里配置的禁用列表只有在开启了控制台的情况下才会生效。所以这里的效果就体现不出来,当然这种方式在我们调试的时候确实非常有用。
所以我就试着在abp插件中寻找有没有可以拦截的方式,果然在插件的配置页的高级选项里面提供了自定义的过滤列表。我们在这里添加过滤规则即可,而且这里是全局生效的。
同时给大家一些abp插件设置的建议。
此时已禁用了爱奇艺的广告拦截js文件,再刷新爱奇艺的效果如下。
就这样成功解决了,也非常简单。善于思考,敢于尝试。很多问题都会非常简单的。
还有要补充的一个知识点:为什么请求的js文件后面要加上随机数?
在同一url重复发起请求的时候可能会报304。如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是:服务端已经执行了GET,但文件未变化。
这个时候需要加上时间戳或者随机数,这样浏览器每次都会以为是一个新的请求所以不会读取缓存。
举一反三:如果爱奇艺的检测广告被拦截的js不是单独的一个js文件,而是和其他逻辑代码放在一起的,此时直接禁止js加载会导致视频不能播放又怎么改如何处理呢?
小伙伴们可以思考一下和我探讨?
赞赏微信赞赏支付宝赞赏
6条评论