用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 相关文章推荐
Highslide.js是一款基于js实现的网页中图片展示插件
Mar 30 Javascript
jquery创建div 实现代码
Apr 27 Javascript
event.X和event.clientX的区别分析
Oct 06 Javascript
javascript进行四舍五入方法汇总
Dec 16 Javascript
JS获得图片alt信息的方法
Apr 01 Javascript
浅谈javascript事件取消和阻止冒泡
May 26 Javascript
禁止按回车键提交表单的方法
Jun 11 Javascript
详解前端自动化工具gulp自动添加版本号
Dec 20 Javascript
Vue.js实例方法之生命周期详解
Jul 03 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
Dec 16 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
Sep 03 Javascript
node使用async_hooks模块进行请求追踪
Jan 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
Yii框架form表单用法实例
2014/12/04 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
用 python 进行微信好友信息分析
2020/11/28 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
高中毕业生自我鉴定
2013/11/03 职场文书
高中生自我评价个人范文
2013/11/09 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
酒店端午节促销方案
2014/02/18 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
项目经理任命书内容
2014/06/06 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
人生感悟经典句子
2019/08/20 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang