微信禁止下拉查看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怎么把&amp;字符换成&quot;&amp;amp:&quot;
Oct 19 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
在JavaScript并非所有的一切都是对象
Apr 11 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
May 29 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
Jul 06 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
Apr 16 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
Active控件问题小结(附解决办法)
Jun 09 Javascript
jQuery插件ajaxFileUpload使用详解
Jan 10 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
Aug 31 Javascript
ES6 迭代器与可迭代对象的实现
Feb 11 Javascript
vue递归组件实战之简单树形控件实例代码
Aug 27 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
js常见表单应用技巧
2008/01/09 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Python实现Linux中的du命令
2017/06/12 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
python二进制文件的转译详解
2019/07/03 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
松材线虫病防治方案
2014/06/15 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
工商局个人工作总结
2015/03/03 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers