用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 申明函数的三种方法 每个函数就是一个对象(一)
Dec 04 Javascript
jquery自动填充勾选框即把勾选框打上true
Mar 24 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
Jan 05 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
Aug 05 Javascript
功能强大的jquery.validate表单验证插件
Nov 07 Javascript
js仿新浪微博消息发布功能
Feb 17 Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 Javascript
使用axios实现上传图片进度条功能
Dec 21 Javascript
详解vue组件基础
May 04 Javascript
VUEX 数据持久化,刷新后重新获取的例子
Nov 12 Javascript
node.js 微信开发之定时获取access_token
Feb 07 Javascript
vue-video-player 断点续播的实现
Feb 01 Vue.js
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
php操作mysqli(示例代码)
2013/10/28 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
Python进程间通信Queue实例解析
2018/01/25 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
python opencv实现图像边缘检测
2019/04/29 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
DJI全球:DJI Global
2021/03/15 全球购物
员工试用期考核自我鉴定
2014/04/13 职场文书
投标承诺书怎么写
2014/05/24 职场文书
公司外出活动方案
2014/08/14 职场文书
Python中如何处理常见报错
2022/01/18 Python
Django框架之路由用法
2022/06/10 Python