微信禁止下拉查看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 相关文章推荐
checkbox 复选框不能为空
Jul 11 Javascript
jQuery统计指定子元素数量的方法
Mar 17 Javascript
Jquery实现鼠标移动放大图片功能实例
Mar 25 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
Jun 13 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
Jan 20 Javascript
JS实现简易刻度时钟示例代码
Mar 11 Javascript
详解Angular系列之变化检测(Change Detection)
Feb 26 Javascript
记录vue做微信自定义分享的一些问题
Sep 12 Javascript
Node.js中console.log()输出彩色字体的方法示例
Dec 01 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
node使用async_hooks模块进行请求追踪
Jan 28 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中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
php获取文件大小的方法
2014/02/26 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
python插入数据到列表的方法
2015/04/30 Python
python检查指定文件是否存在的方法
2015/07/06 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
在python中安装basemap的教程
2018/09/20 Python
Python tornado上传文件的功能
2020/03/26 Python
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
远程调用的原理
2014/07/05 面试题
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
家长通知书家长意见
2014/12/30 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
表扬稿范文
2015/01/17 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL