做网站,尤其是IT类型的网站,没有额外的收入,只有一点广告费收入,但是这种网站的大部分用户群体就是程序员,也就是我们这种程序员大部分会安装“广告终结者
”、“AdGuard
”等广告拦截插件。
我一般不会安装这些东西,我现在来测试这些安装了这些软件。确实挺厉害的。全拦截了。
JavaScript 引入文件检测广告插件
AdGuard 是根据文件名来判断的,网上有方案,比如说我们自己创建一个文件名为一些常用广告的文件名。
我们创建一个文件名为“adview_pic_cpc_cpm_cpa_guanggao_gg_ads_300x250.adsbygoogle.js
”的 JS 文件,文件内容,我们定义一个全局变量。
window.ads = 'sojson.v4';
然后在这个JS
下面加入以下代码:
<script src="//cdn.www.sojson.com/ad/adview_pic_cpc_cpm_cpa_guanggao_gg_ads_300x250.adsbygoogle.js"></script>
<script>
if(typeof(ads) == 'undefined'){
setInterval(function () {
alert('如果本站的广告您要屏蔽的话。抱歉,咱们相互选择吧。\n\n请对本站屏蔽广告插件关掉。\n\n本站的广告如果有对您使用本站工具有影响,请告知我。\n\n如果没有,还请多多照顾,点点感兴趣的广告。\n\n解决办法:关闭屏蔽,刷新网页就解决了。');
},3e3);
}
</script>
如果用户安装了“AdGuard”插件,那么会提示下面的内容,并且3秒显示一次。
但是我再安装了比较火“广告终结者”发现此方案无效。我观察了一下,“广告终结者”是通过域名来判断的。
JS针对性性判断广告是否被拦截
我针对性观察了下,广告屏蔽和不屏蔽的区别,来看看下面的张图。上面是被屏蔽,下面是无屏蔽有广告的 HTML 代码。
是不是就有思路了?
这个是 google 广告,加载都是用<ins>
标签,class="adsbygoogle"
,我们就简单的判断下ins
标签的内容为空,为了判断减少误判,我们判断所有的都为“”,就已经屏蔽了。
var as = document.querySelectorAll('.adsbygoogle'),al=as.length;
as.forEach(function(a,b){
if(a.innerHTML==''){
al-=1;
if(al===0){
setInterval(function () {
alert('如果本站的广告您要屏蔽的话。抱歉,咱们相互选择吧。\n\n请对本站屏蔽广告插件关掉。\n\n本站的广告如果有对您使用本站工具有影响,请告知我。\n\n如果没有,还请多多照顾,点点感兴趣的广告。\n\n解决办法:关闭屏蔽,刷新网页就解决了。');
},3e3);
}
}
});
完全有效,缺点就是要针对性。