用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 相关文章推荐
jquery配合css简单实现返回顶部效果
Sep 30 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
Dec 16 Javascript
查找页面中所有类为test的结点的方法
Mar 28 Javascript
JavaScript中SetInterval与setTimeout的用法详解
Nov 10 Javascript
Angularjs实现多个页面共享数据的方式
Mar 29 Javascript
node.js实现端口转发
Apr 14 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
Aug 05 Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
bootstrap警告框使用方法解析
Jan 13 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
Sep 03 Javascript
Node.js安装详细步骤教程(Windows版)详解
Sep 01 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
script标签的 charset 属性使用说明
2010/12/04 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
python下载图片实现方法(超简单)
2017/07/21 Python
python安装Scrapy图文教程
2017/08/14 Python
Python面向对象编程基础实例分析
2020/01/17 Python
Python实现代码块儿折叠
2020/04/15 Python
Python控制台实现交互式环境执行
2020/06/09 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
会计专业自荐书
2014/07/08 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
内乡县衙导游词
2015/02/05 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书