在微信公共号内绑定域名后或微信内打开第三方链接跳转非单页面网站时,经常会有弹层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 微信返回按钮事件控制弹层关闭还是返回上一页的更多相关文章

  1. 转载 iOS拦截导航栏返回按钮事件的正确方式

    原文链接:http://www.jianshu.com/p/25fd027916fa 当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮 ...

  2. iOS拦截导航栏返回按钮事件的正确方式

    当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮时不一定要 pop 回上一界面,比如一个视频播放界面,进入横屏后,默认点击返回按钮仍然 ...

  3. iOS拦截导航栏返回按钮事件的正确方式(二)

    当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮时不一定要 pop 回上一界面,比如一个视频播放界面,进入横屏后,默认点击返回按钮仍然 ...

  4. HTML5 浏览器返回按钮/手机返回按钮事件监听

    1.HTML5  History对象 支持使用pushState()方法修改地址栏地址,而不刷新页面. popstate事件 当history实体被改变时,popstate事件将会发生.调用pushS ...

  5. 拦截iOS系统导航栏返回按钮事件-三种方法

    方法一:在dealloc里面书写监听事件,因为只有pop才会调用dealloc,push不会掉用 - (void)dealloc {YLLog(@"123"); } 方法二:在- ...

  6. 微信小程序——加入购物车弹层

    对于网上商城,加入购物车是一个必备功能了.俺今天就来说下在微信小程序里如何造一个购物车弹层. 先上图: 主要用到的微信API:wx.createAnimation(OBJECT) 说下思路: 1.wx ...

  7. asp.net从一个页面的单击按钮事件控制另一个页面的刷新

    分步说(比如你的三个页面分别为main.aspx; left.aspx;right.aspx,且点击left.aspx页面的button,则right.aspx刷新): 1. 在父页面main.asp ...

  8. IOS微信中看文章跳转页面后点击返回无效

    经过查找原因发现,下面两种链接,链接1返回不了,链接2可以返回. 链接1:http://mp.weixin.qq.com/s?__biz=MzA5NDY5MzcyNA==&mid=265089 ...

  9. ios微信浏览器click事件不起作用的解决方法

    $(document).on( "click", ".weui_cell", function (event) {alert(); }); JS代码是这样的,h ...

随机推荐

  1. python-变量、if else语句 、for循环、while循环(4月26号)

    变量: 五.注意:python是可执行程序 在linux写python第一行必须写#!/usr/bin/env python(声明解释器在windows中写python第一行需要写# -*- codi ...

  2. failed: dlopen failed: cannot locate symbol

    修改proj.android/jni/Application.mk 添加:APP_PLATFORM := android-19

  3. mysql 8.0 主从复制的优化

    mysql 8.0复制改进一简介: 基于GTID下的并行复制,本文不考虑MGR架构二 主要特性   1 基于writeset的下的改进型并行复制     我在之前的一篇文章关于并行复制中详细的介绍了关 ...

  4. 通过excel创建表

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. ulimit -a

    在linux中执行ulimit -a 即可查询linux相关的参数 用ulimit命令是可以修改这些配置的命令的格式:ulimit [-SHacdefilmnpqrstuvx] [limit] 中间的 ...

  6. Vue+Typescript项目中使用echarts

    方案一:推荐 在typescript+Vue的项目中引用echarts,为了加强引用,引入echarts和@types/echarts两个包,一个是工程依赖,一个是声明依赖. npm install ...

  7. 探索C++头文件解析方法

    最近一直在搞基于SWIG的C++接口翻译Java代码的工作.SWIG内部基于Bison(Yacc)的C/C++解析器,最近纠结于SWIG不能解析C++构造函数中的默认初始化赋值操作,想找一个能够补充此 ...

  8. python列表的基础操作

    Operation Result Trans x in s True if an item of s is equal to x, else False x值是否在s列表中 x not in s Fa ...

  9. sql server 合并字段

    合并字段用+号连接就可以了,不过要判断是不是有的合并项为NULL.如果其中一项为NULL,则整个合并字段为NULL. (IsNull(a.supplier, '')  + IsNull(a.po, ' ...

  10. 利用微信支付的订单查询接口可以在APP 中提高支付的可靠性

    最近公司有一个应用,用户可以在微信公众号上面下单,也可以在APP 中下单. 当用户在公共号上面下单时,微信支付成功可以返回微信支付单号,但是在APP 中用户微信支付时,个别时候会出现用户已经付款成功, ...