微信禁止下拉查看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 相关文章推荐
设置下载不需要倒计时cookie(倒计时代码)
Nov 19 Javascript
JavaScript继承方式实例
Oct 29 Javascript
根据表格中的某一列进行排序的javascript代码
Nov 29 Javascript
从js向Action传中文参数出现乱码问题的解决方法
Dec 29 Javascript
js图片轮播手动切换特效
Jan 12 Javascript
js+html制作简单日历的方法
Jun 27 Javascript
微信小程序request请求后台接口php的实例详解
Sep 20 Javascript
vue js秒转天数小时分钟秒的实例代码
Aug 08 Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 Javascript
基于elementUI实现图片预览组件的示例代码
Mar 31 Javascript
详解微信小程序网络请求接口封装实例
May 02 Javascript
解决layui动态加载复选框无法选中的问题
Sep 20 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通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
php生成微信红包数组的方法
2019/09/05 PHP
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
详解python编译器和解释器的区别
2019/06/24 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
python能自学吗
2020/06/18 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
护士节策划方案
2014/05/19 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
建党伟业的观后感
2015/06/01 职场文书
鸡毛信观后感
2015/06/11 职场文书
公司开业致辞
2015/07/29 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python
Redis实现分布式锁的五种方法详解
2022/06/14 Redis
python数字图像处理实现图像的形变与缩放
2022/06/28 Python