用js屏蔽被http劫持的浮动广告实现方法


Posted in Javascript onAugust 10, 2017

最近发现网站经常在右下角弹出一个浮动广告,开始的时候以为只是浏览器的广告。

后来越来越多同事反映在家里不同浏览器也会出现广告。然后深入检查了下,发现网站竟然被劫持了。

然后百度了一大堆资料,什么http劫持、dns劫持、运营商劫持之类的,确定真的是中招了。看图:

用js屏蔽被http劫持的浮动广告实现方法

用js屏蔽被http劫持的浮动广告实现方法

真是偷梁换柱啊,被插入广告代码了。真是无良奸商,什么都做得出。

然并卵,最重要的解决办法是啥?然后把问题扔给了运维的同事。

最终结果是解决不了。没错,就是这么的坑爹。除非采用https。网上那些什么打电话、发信投诉之类的貌似没啥用。可能是运维太烂了。反正结果就是没结果。

然后,没办法啦。只能我们大前端自己想办法屏蔽啦。然后开启了研究劫持代码之旅,

......过程省略了800字寻找过程。

最终发现了,被劫持的广告会定义一个js全局变量_pushshowjs_ ,里面保存了一些劫持广告的相关信息,然后创建一个id为_embed_v3_dc的div放广告。并且每次都是一样的,不会有变化。

根据劫持广告的投放原理,最终使用了js屏蔽被劫持广告的方法。

具体代码如下:

;(function($,window,undefined){
 var needClear=false,
  timeout;
 if(window._pushshowjs_){
  console.log("adHttp");
  needClear=true;
 }
 window._pushshowjs_={};
 Object.freeze(window._pushshowjs_);//让对象只读, 防止属性被直接修改
 Object.defineProperty(window, '_pushshowjs_', {
  configurable: false,//防止属性被重新定义
  writable: false//防止属性被重新赋值
 });
 if(needClear){
  timeout=setInterval(function(){
   if($("#_embed_v3_dc").length>0){
    $("#_embed_v3_dc").remove();
    console.log("http清除");
    needClear=false;
    clearInterval(timeout);
   }
  },500);
  $(window).load(function(){
   if(needClear){
    setTimeout(function(){
     clearInterval(timeout);
     console.log("清除");
    },2000);
   }
  });
 }
}(jQuery,window));

代码不多,就不详细解析了(如果觉得代码有问题,望指正)。简单点说就是把劫持广告必须的全局js变量_pushshowjs_设定为不可被修改,只读。如果发现广告就清除。

放了代码,终于跟被劫持的广告说88了。

为什么说是笨办法?

因为这只是自欺欺人。其实劫持还是存在,并且被劫持了的js的加载顺序有可能会发生变化而导致错误,理想的办法还是要靠运维跟运营商去解决或使用https。

每个劫持的广告逻辑应该都差不多,但广告代码都会不同。所以我这个不一定会适用于其他的劫持广告。这只是一个思路,没办法之中的办法。

有大神有更好的解决办法,望指教。

以上这篇用js屏蔽被http劫持的浮动广告实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 对象、函数和继承
Jul 07 Javascript
javascript实现div的显示和隐藏的小例子
Jun 25 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
Sep 27 Javascript
js改变鼠标的形状和样式的方法
Mar 31 Javascript
JavaScript检查某个function是否是原生代码的方法
Aug 20 Javascript
js实现文字滚动效果
Mar 03 Javascript
快速掌握Node.js模块封装及使用
Mar 21 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
Nov 18 Javascript
详解Angular 4.x NgIf 的用法
May 22 Javascript
vue.js学习之vue-cli定制脚手架详解
Jul 02 Javascript
详解vue2.0模拟后台json数据
May 16 Javascript
javascript实现商品图片放大镜
Nov 28 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
Aug 10 #Javascript
浅谈sass在vue注意的地方
Aug 10 #Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
Aug 09 #jQuery
Angular 2.0+ 的数据绑定的实现示例
Aug 09 #Javascript
Ionic3实现图片瀑布流布局
Aug 09 #Javascript
JavaScript闭包和回调详解
Aug 09 #Javascript
ionic 3.0+ 项目搭建运行环境的教程
Aug 09 #Javascript
You might like
如何分别全角和半角以避免乱码
2006/10/09 PHP
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
详解Python迭代和迭代器
2016/03/28 Python
开源Web应用框架Django图文教程
2017/03/09 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
彻底理解Python list切片原理
2017/10/27 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
html5唤醒APP小记
2019/03/27 HTML / CSS
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
办公室文员自荐书
2014/02/03 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
转让协议书范本
2014/04/15 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android
virtualenv隔离Python环境的问题解析
2022/06/21 Python