微信禁止下拉查看URL的处理方法


Posted in Javascript onSeptember 28, 2017

场景:

微信下拉时可以查看到URL,本身是微信的一种安全策略之一,也是一种用户交互友好的体验;

效果原理:

微信下拉弹性效果其实是浏览器本身的一种特性,重点就是scroll值的一种体现;

处理策略:

1、直接禁止mobile端的touchmove事件;

这种策略一般适用页面只有一屏不需要下拉情况下使用;

var touch1 = function(){
  document.querySelector(‘body‘).addEventListener(‘touchmove‘, function (e) { 
    e.preventDefault(); 
  });
}

弊端:对于大小不同的屏要考虑到内容一屏全部显示,不然2+屏的内容就没有办法看了;

2、禁止touchmove同时判断scroll的位置是否到达顶部;

考虑到下拉时滚动条是否到达顶部 <= 10 来禁止touchmove事件,同时考虑存在先上拉再下拉的情况所以监听的touchend事件并计算一次touch事件流中的最高点位置用以判断

var touch2 = function () {
  var lastY;//最后一次y坐标点
  var betterY;//每次touch最高点
  document.querySelector(‘body‘).addEventListener('touchstart', function(event) {
    lastY = event.originalEvent.changedTouches[0].clientY;
    betterY = lastY;
  });
  document.querySelector(‘body‘).addEventListener('touchmove', function(event) {
    var y = event.originalEvent.changedTouches[0].clientY;
    if(y > betterY){
      betterY = y;
    }
    var st = document.body.scrollTop; //滚动条高度
    if (y >= lastY && st <= 10) {
      lastY = y;
      event.preventDefault();
    }
    lastY = y;
  });
  document.querySelector(‘body‘).addEventListener('touchend', function(event) {
    var y = event.originalEvent.changedTouches[0].clientY;
    var st = document.body.scrollTop; //滚动条高度
    if(y < betterY && st <= 10){
      event.preventDefault();
    }
  });
}

弊端:第一次的touchmove存在漏洞问题,touchmove的过程中也存在漏洞

3、监听scroll的滚动事件,禁止高度<0;

每当滚动条的高度小于0时就重置为0,强制回退顶部位置

var touch3 = function () {
  window.onscroll = function () {
    var top = document.documentElement.scrollTop || document.body.scrollTop;
    if(top <= 0){
      document.body.scrollTop = 0;
    }
  }
}

弊端:会存在下拉URL闪屏的现象

总结:

可以考虑以上三种策略结合来使用会更好;也有些人把touchmove禁掉后自己模拟touchmove处理,也是可以做到的就是比较复杂而已;

以上所述是小编给大家介绍的微信禁止下拉查看URL的处理方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复

Javascript 相关文章推荐
用js实现层随着内容大小动态渐变改变 推荐
Dec 19 Javascript
jQuery创建插件的代码分析
Apr 14 Javascript
js怎么判断flash swf文件是否加载完毕
Aug 14 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
Mar 10 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
Aug 18 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
Mar 22 jQuery
vue数字类型过滤器的示例代码
Sep 07 Javascript
利用jqprint插件打印页面内容的实现方法
Jan 09 Javascript
VUE脚手架具体使用方法
May 20 Javascript
理解JavaScript中的对象
Aug 25 Javascript
jQuery选择器之属性过滤选择器详解
Sep 28 #jQuery
Angular.js中window.onload(),$(document).ready()的写法浅析
Sep 28 #Javascript
js实现登录注册框手机号和验证码校验(前端部分)
Sep 28 #Javascript
基于JavaScript实现前端数据多条件筛选功能
Aug 19 #Javascript
javascript 开发之网页兼容各种浏览器
Sep 28 #Javascript
JavaScript中重名的函数与对象示例详析
Sep 28 #Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
Sep 28 #Javascript
You might like
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
python 输出所有大小写字母的方法
2019/01/02 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
python返回数组的索引实例
2019/11/28 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
学习标兵获奖感言
2014/02/20 职场文书
招股说明书范本
2014/05/06 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
Python+Appium实现自动抢微信红包
2021/05/21 Python
详解Python魔法方法之描述符类
2021/05/26 Python
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js