偶然发现基于 WebStackPage 搭建的导航站有些页面的元素没有显示出来,排查半天原因,最终定位在AdBlock Plus扩展拦截了部分元素。
类似下面一段代码:
反复重试后,最后定位在window.open(“http://xkysmv.com/”, “_blank”) 的网址上。
虽然知道AdBlock Plus能对网址及页面元素进行过滤拦截,但能根据页面内容的网址进行拦截,从而不让某个元素显示,也太神奇智能了。
查看AdBlock Plus的使用帮助,AdBlock确实有 Block a specific element 的功能。
将使用的过滤列表从 EasyList China+EasyList 切换为 EasyList后,页面显示恢复正常,看来是EasyList China列表规则拦截的。
下载EaseList China的代码 https://github.com/easylist/easylistchina ,一看2万多行就头大。
仔细研究学习 Adblock Plus filters explained 后,尝试用onclick搜索,很快定位到了
##div[onclick*=".open"][onclick*="ky"]
##div[onclick*=".open"][onclick*="leyu"]
应该是此规则误杀的,此规则只要在div的onclick事件中包含了.open 和key、leyu字符就进行拦截。
吐个槽:此规则也太宽泛了吧。
于是弃用window.open,用自定义函数替代
function myopener(href,attr="_blank"){
let a=document.createElement("a");
a.target=attr;
a.href=href;
a.click();
}
测试后正常。
由于各种站点及APP广告泛滥,因此AdBlock Plus、uBlock Origin、Adguard 这样的广告拦截器很受欢迎,但这也对很多依靠广告为生的站点造成了伤害。
一直觉得只要在自己网站不投放弹窗、浮动类广告,只是纯文字的广告,应该不会被各种广告拦截器拦截。
此次事故刚好提了个醒:小心各种广告拦截器的页面元素隐藏功能,杀伤力太大了。
转载请注明:虚拟号之家 » 小心AdBlock Plus的页面元素隐藏功能