我之前介绍的浏览器的机制有一个插件进程。
第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建。
adblock等插件就是在这个阶段中运行的。
我都做了什么实验?
1,混淆dom元素的id,class名字,全部改为随机值。
2,渲染结构不在body节点,重新在<html>下append新的节点,替换原来的body节点。
3,对于替换媒体域名的媒体,将图片和跳转url进行媒体域名的替换和加密。
总之,在前端模版上让广告屏蔽插件无法选中我们的dom结构进行屏蔽。
屏蔽插件都做了什么?
1,js的阻塞。<script type="text/javascript" src="//Xxxxxxx/cpro/ui/cm.js" async="async" defer="defer" ></script>。
虽然很多媒体替换了新域名,但是由于媒体不能经常的变更,屏蔽规则包含了大部分替换的媒体。所以上面的js无法加载出来。
2,dom元素的屏蔽,符合特征的dom结构会被屏蔽。
3,广告的iframe里资源被阻塞。主要为图片。
这部分我已经用媒体的新域名进行替换和加密,但是还是之前的原因,屏蔽规则已经包含,所以命中规则的媒体图片依旧会阻塞。
4,url无法跳转,跳转链接命中baidu.com的规则,这些链接会阻塞跳转,影响一跳。
这部分我也进行替换和加密,测试是ok的。可以进行跳转。
瓶颈在哪里?
域名不能随机生成。。这个就是最大的问题。
目前的解决方式,媒体申请一个新的域名。然后购买云加速的服务,阿里百度都有。将第三方的链接,映射到他们申请的域名上,访问媒体自己的url,云加速到第三方路径。
但是需要媒体频繁更换域名并重新上线。
而作为第三方的我们只要用媒体新申请的域名,然后替换a标签的href,img的src,混淆一下就可以了。