微信禁止下拉查看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 相关文章推荐
基于jquery的一个简单的脚本验证插件
Apr 05 Javascript
基于jquery点击自以外任意处,关闭自身的代码
Feb 10 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
Mar 28 Javascript
jQuery 计算iframe 窗口大小的方法
May 13 Javascript
javascript瀑布流式图片懒加载实例
Jun 28 Javascript
Vue.js对象转换实例
Jun 07 Javascript
jquery一键控制checkbox全选、反选或全不选
Oct 16 jQuery
JS常见构造模式实例对比分析
Aug 27 Javascript
node.js基于socket.io快速实现一个实时通讯应用
Apr 23 Javascript
对vuex中getters计算过滤操作详解
Nov 06 Javascript
借助云开发实现小程序短信验证码的发送
Jan 06 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 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 根据IP地址控制访问的代码
2010/04/22 PHP
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
PHP实现合并discuz用户
2015/08/05 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
悬浮数字的实现案例
2014/02/19 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
通过C++学习Python
2015/01/20 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Python读取properties配置文件操作示例
2018/03/29 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
Python定义函数实现累计求和操作
2020/05/03 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
python 负数取模运算实例
2020/06/03 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
美国智能家居专家:tink
2019/06/04 全球购物
服装创业计划书范文
2014/02/05 职场文书
护理专业自荐信范文
2014/02/26 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫