用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图片滚动图片的效果(另类实现)
Jun 02 Javascript
JS实现文字放大效果的方法
Mar 03 Javascript
Bootstrap每天必学之下拉菜单
Nov 25 Javascript
理解javascript模块化
Mar 28 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 Javascript
jquery仿苹果的时间/日期选择效果
Mar 08 Javascript
JavaScript实现form表单的多文件上传
Mar 27 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
May 10 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 Javascript
详解如何在微信小程序中愉快地使用sass
Jul 30 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
Sep 23 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
第二节--PHP5 的对象模型
2006/11/16 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
javascript基础知识讲解
2017/01/11 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
Python实现股市信息下载的方法
2015/06/15 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
python3安装speech语音模块的方法
2018/12/24 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
化工专业推荐信范文
2013/11/28 职场文书
材料会计岗位职责
2014/03/06 职场文书
经典安踏广告词
2014/03/21 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
学习与创新自我评价
2015/03/09 职场文书
法人代表资格证明书
2015/06/18 职场文书
高中同学会致辞
2015/08/01 职场文书
庆祝教师节主题班会
2015/08/17 职场文书