用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 相关文章推荐
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 Javascript
javascript+dom树型菜单类,希望朋友们一起进步
May 03 Javascript
用倒置滤镜把div倒置,再把table倒置。
Jul 31 Javascript
google地图的路线实现代码
Aug 20 Javascript
微信小程序 form组件详解及简单实例
Jan 10 Javascript
jQuery内容筛选选择器实例代码
Feb 06 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
Jul 13 Javascript
jquery easyui如何实现格式化列
Jul 30 jQuery
python爬取安居客二手房网站数据(实例讲解)
Oct 19 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
May 08 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
Nov 18 Javascript
react 组件传值的三种方法
Jun 03 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
MySQL数据源表结构图示
2008/06/05 PHP
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
js变量以及其作用域详解
2020/07/18 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
Python复制文件操作实例详解
2015/11/10 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
python 接收处理外带的参数方法
2018/12/03 Python
Python模块future用法原理详解
2020/01/20 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
生物制药毕业生自荐信
2013/10/16 职场文书
海飞丝的广告词
2014/03/20 职场文书
黄石寨导游词
2015/02/05 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
python实现层次聚类的方法
2021/11/01 Python
我收到了德劲DE1107
2022/04/05 无线电