IOS 微信返回按钮事件控制弹层关闭还是返回上一页
在微信公共号内绑定域名后或微信内打开第三方链接跳转非单页面网站时,经常会有弹层Modal的需求,此时如果用户习惯性点击微信自带的返回“<”按钮,就会跳转回上一页或退出网站,而为了避免这种不好的误操作,需要手动“监听返回”,经过本人多次验证场景可满足有弹层时页面按钮返回和微信返回的双方式都隐藏弹层Modal而不返回,而无弹层时可直接返回上一页,下面就看代码实现:
//打开弹层Modal
openModal = ()=>{
//你的弹出弹层的代码,如modal.show()之类的; //
this.pushNewState();
//添加监听
window.addEventListener("popstate", this.yourEventListener.bind(this), false);
} //新push一个state
pushNewState = ()=>{
var state = {title: "title", url: "#"};
window.history.pushState(state, "", "");
} //监听返回执行的函数
yourEventListener = (arg1,argN,...)=>{
//移除监听
window.removeEventListener("popstate", this.yourEventListener.bind(this), false);
//关闭你的弹层,如modal.hide()之类的语句 //如果当前state等于新push的state则退一步state
if (window.history.state != null) {
window.history.back();
}
}
以上就是全部实现代码,需要注意两点:
1、当弹层有自带的关闭或隐藏按钮时,应改写其执行函数 或 使用自定义的按钮并调用 this.yourEventListener(arg)来执行关闭弹层,否则隐藏弹层后页面停留在新push的state,此时点返回需要点击两次才会有效;
2、在 this.yourEventListener 中添加debugger 调试会发现,如果多次弹层,即使使用了 window.removeEventListener("popstate", this.yourEventListener.bind(this), false); 在关闭弹层时依然会调用多次 this.yourEventListener 执行,目前不清楚为什么,希望有明白的可以留言讨论下,但这并不影响使用效果。
IOS 微信返回按钮事件控制弹层关闭还是返回上一页的更多相关文章
- 转载 iOS拦截导航栏返回按钮事件的正确方式
原文链接:http://www.jianshu.com/p/25fd027916fa 当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮 ...
- iOS拦截导航栏返回按钮事件的正确方式
当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮时不一定要 pop 回上一界面,比如一个视频播放界面,进入横屏后,默认点击返回按钮仍然 ...
- iOS拦截导航栏返回按钮事件的正确方式(二)
当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮时不一定要 pop 回上一界面,比如一个视频播放界面,进入横屏后,默认点击返回按钮仍然 ...
- HTML5 浏览器返回按钮/手机返回按钮事件监听
1.HTML5 History对象 支持使用pushState()方法修改地址栏地址,而不刷新页面. popstate事件 当history实体被改变时,popstate事件将会发生.调用pushS ...
- 拦截iOS系统导航栏返回按钮事件-三种方法
方法一:在dealloc里面书写监听事件,因为只有pop才会调用dealloc,push不会掉用 - (void)dealloc {YLLog(@"123"); } 方法二:在- ...
- 微信小程序——加入购物车弹层
对于网上商城,加入购物车是一个必备功能了.俺今天就来说下在微信小程序里如何造一个购物车弹层. 先上图: 主要用到的微信API:wx.createAnimation(OBJECT) 说下思路: 1.wx ...
- asp.net从一个页面的单击按钮事件控制另一个页面的刷新
分步说(比如你的三个页面分别为main.aspx; left.aspx;right.aspx,且点击left.aspx页面的button,则right.aspx刷新): 1. 在父页面main.asp ...
- IOS微信中看文章跳转页面后点击返回无效
经过查找原因发现,下面两种链接,链接1返回不了,链接2可以返回. 链接1:http://mp.weixin.qq.com/s?__biz=MzA5NDY5MzcyNA==&mid=265089 ...
- ios微信浏览器click事件不起作用的解决方法
$(document).on( "click", ".weui_cell", function (event) {alert(); }); JS代码是这样的,h ...
随机推荐
- ajax高级操作
$('#ajax_submit').click(function () { $.ajax({ 'url':'/app_ajax', 'type':'post', 'data':$("#f1& ...
- php7 date函数警告去除
在代码头上添加 date_default_timezone_set("PRC");
- IntelliJ IDEA取消自动import所有import *
自动导入新类的时候,往往会把几个import合并为一个*,如何只单独import单个类:
- win10 solidity开发环境搭建
1. 软件安装 1) 安装nodejs 安装完成后将node.exe所在路径加入环境变量PATH中,以便在cmd命令行中直接使用node和npm命令 下面的操作在git bash下进行 2) 安装so ...
- Cleanmymac X空间透镜再升级
什么是空间镜透,在Cleanmymac X中具体干什么使得?你了解多少?没关系,不要紧,看这里,下面给大家分享一下这款好用软件下的实用功能-空间透镜.盘它! 首先,Cleanmymac X是一款Mac ...
- docker-容器,仓库
---恢复内容开始--- 前言: 学技术不能该断时间,连续的学习才是最好的学习方式. 00x1: 创建一个容器:docker create -it xxxx 而启动容器就有两种状态了,第一:新容器启动 ...
- 软链接ln -s 总结
ln -s 软链接知识总结 1.软连建立:ln -s 源文件 软链接文件 2.误区:软链接是创建的,就意味着软链接文件不可以在创建之前存在 3.类比:win快捷方式 4.删除:rm就可以,但源文件 ...
- KeyPress和KeyDown/KeyUp
(1) KeyPress 和KeyDown .KeyUp之间的区别: 1).KeyPress主要用来捕获数字(注意:包括Shift+数字的符号).字母(注意:包括大小写).小键盘等除了F1-12 ...
- [STM32F103]定时器中断
l 使能定时器时钟. RCC_APB1PeriphClockCmd(); l 初始化定时器,配置ARR,PSC. TIM_TimeBaseInit(); l 开启定时器中断,配置NVIC. void ...
- 搭建zookeeper+kafka集群
搭建zookeeper+kafka集群 一.环境及准备 集群环境: 软件版本: 部署前操作: 关闭防火墙,关闭selinux(生产环境按需关闭或打开) 同步服务器时间,选择公网ntpd服务器或 ...