微信禁止下拉查看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获取文本节点之 text()/val()/html() 方法区别
Mar 01 Javascript
基于JQuery的动态删除Table表格的行和列的代码
May 12 Javascript
range 标准化之获取
Aug 28 Javascript
Nginx上传文件全部缓存解决方案
Aug 17 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
May 09 Javascript
Angular2 PrimeNG分页模块学习
Jan 14 Javascript
bootstrap weebox 支持ajax的模态弹出框
Feb 23 Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 Javascript
js实现图片上传并预览功能
Aug 06 Javascript
koa2实现登录注册功能的示例代码
Dec 03 Javascript
Vue form表单动态添加组件实战案例
Sep 02 Javascript
JavaScript实现外溢动态爱心的效果的示例代码
Mar 21 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实现编辑和保存文件的方法
2015/07/20 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
python实现简单神经网络算法
2018/03/10 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
幼儿园保教管理制度
2014/02/03 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
担保书范文
2015/01/20 职场文书
防震减灾主题班会
2015/08/14 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技