场景:开发微信内的H5活动,需要进行微信授权,我们采用的是在一个静态页面(只有js,所以是个空白页面)内进行授权,授权后再跳转到活动主页。

客户需求:从活动主页返回时不显示这个授权页面(空白页面),直接退出。

解决方案:(方案一为踩过的坑;方案二为放在前端处理的方案)

方案一:(不可行

直接监听需要关闭窗口的页面的返回事件来关闭窗口。示例代码:

1 pushHistory();2         window.addEventListener("popstate", function(e) {3             WeixinJSBridge.call('closeWindow');4         }, false);5         functionpushHistory() {6             var state ={7                 title: "title",8                 url: "#"
9 };10             window.history.pushState(state, "title", "#");11         }

此方案存在的bug:在微信内置浏览器内该事件会继承到子页面(需要关闭窗口的页面为主页面,在主页面跳转到的其他页面称为子页面),在子页面点击返回也会关闭窗口。(暂未找到原因所在,如有大牛解决,欢迎留言指导~)

方案二:(可行

在方案一的基础上优化,加入session判断当前页面是否为需要关闭窗口的页面。示例代码:

1      sessionStorage.setItem('key', 1);

       pushHistory();2         window.addEventListener("popstate", function(e) {3             if(sessionStorage.getItem('key') != 1) {4                 sessionStorage.setItem('key', 1);5 }6             if(sessionStorage.getItem('key') == 1) {7                 document.addEventListener('WeixinJSBridgeReady', function(){ WeixinJSBridge.call('closeWindow'); }, false);8                 WeixinJSBridge.call('closeWindow');9                 parent.WeixinJSBridge.call('closeWindow');//网上有人认为微信内置浏览器和本地开发测试的环境不一样,微信内部是采用iframe方式加载页面的(暂未得到考证),所以我采用了两种方式都写的兼容写法
10 }11
12         }, false);13         functionpushHistory() {14             var state ={15                 title: "title",16                 url: "#"
17 };18             window.history.pushState(state, "title", "#");19         }
思路:将主页面(需要关闭窗口的页面)的key值设为1,子页面(从主页面跳转到的其他页面)的key值设为其他任意值,判断key值是否为1,为1的时候点击返回再关闭窗口。(注意:每次进到主页面的时候都要将key值重置为1。   因为session的生命周期是当前窗口,从其他页面子页面回到主页面会改变key)方案三:(替换方案在授权页面加入活动方的宣传广告,避免空白。方案四:(最优方案微信授权放在后台进行,这样就不会存在这个授权页面,也就不用去考虑会出现空白的问题了。

更多专业前端知识,请上 【猿2048】www.mk2048.com

微信内置浏览器点击“返回”关闭窗口相关推荐

  1. cocoscreator实现微信内置浏览器点击图片识别图中二维码

    最近在做一个微信内置浏览器的小游戏,小游戏中有一个二维码,需要用户点击长按二维码弹出系统识别二维码按钮. 下面是解决步骤: 1.cocoscreator是如何实现在浏览器中渲染游戏画面的 看图中箭头处 ...

  2. html微信内置浏览器点击图片放大,双指缩放,附源码(自测可用)

    本人用的是vue框架 引用微信的JS <script type="text/javascript" src="http://res.wx.qq.com/open/j ...

  3. 微信内置浏览器缓存清理及关闭

    安卓清除缓存方案 android版微信内置浏览器(X5内核) 在安卓版微信内打开链接 http://debugx5.qq.com 拉到调试页面的最底端,勾选上所有的缓存项目,点击清除. 苹果清除缓存方 ...

  4. 微信内置浏览器无法打开APP下载链接的解决方案

    最近遇到一个问题,app用户邀请好友,分享到微信好友,但是微信好友打不开对应的app下载链接.然后ui给我做了个图,引导用户点击浏览器右上角,在外部浏览器中打开app下载页,如下图: 但是我又遇到问题 ...

  5. html5 微信返回按钮,《解决微信内置浏览器返回上一页强制刷新问题方法》(示例代码)...

    微信内置浏览器在返回上一页面,且上一页面包含AJAX代码时,页面就会被强制刷新,极度影响用户体验.而我们想要的效果是:返回上一页面时,页面还停留在原来的状态,AJAX获取到的数据还在,滚动条也在原来的 ...

  6. 微信android返回上一页位置,解决微信内置浏览器返回上一页强制刷新问题方法...

    微信内置浏览器在返回上一页面,且上一页面包含AJAX代码时,页面就会被强制刷新,极度影响用户体验.而我们想要的效果是:返回上一页面时,页面还停留在原来的状态,AJAX获取到的数据还在,滚动条也在原来的 ...

  7. weixin公众号页面返回上一层_《解决微信内置浏览器返回上一页强制刷新问题方法》...

    微信内置浏览器在返回上一页面,且上一页面包含AJAX代码时,页面就会被强制刷新,极度影响用户体验.而我们想要的效果是:返回上一页面时,页面还停留在原来的状态,AJAX获取到的数据还在,滚动条也在原来的 ...

  8. 微信html开发返回刷新页面,解决微信内置浏览器返回上一页强制刷新问题方法...

    微信内置浏览器在返回上一页面,且上一页面包含AJAX代码时,页面就会被强制刷新,极度影响用户体验.而我们想要的效果是:返回上一页面时,页面还停留在原来的状态,AJAX获取到的数据还在,滚动条也在原来的 ...

  9. 《解决微信内置浏览器返回上一页强制刷新问题方法》

    <解决微信内置浏览器返回上一页强制刷新问题方法> 参考文章: (1)<解决微信内置浏览器返回上一页强制刷新问题方法> (2)https://www.cnblogs.com/li ...

最新文章

  1. C#.NET 上传图片时怎样限制文件格式
  2. Java取得当前类的路径
  3. python开发工程师面试题-分析经典Python开发工程师面试题
  4. Unity学习笔记4 更换编辑器为VS2013及VS的背景图片设置
  5. Echarts与Highcharts的比较
  6. react-router的使用(一)——URL的hash、HTML5的history、Router的基本使用
  7. 如果没有Visual Studio 2015,我们如何创建.NET Core项目 ?
  8. 70进货卖100利润是多少_进货价8块的产品,在网上卖100块,这个电商卖家能赚多少!...
  9. css常用或不熟悉的
  10. angular 新建命令
  11. 后端ajaxPost请求传给前端的显示乱码问题
  12. 使用ASP.NET Core2.2创建WebApp
  13. FPGA实现伪彩色图像
  14. Acute Angle Cloud与Achain达成战略合作,共促区块链系统发展
  15. 20200727《Flask进阶》——模块化程序(蓝本)
  16. 移动硬盘突然识别不了!
  17. 数据挖掘综合应用:贷款产品预测案例
  18. buuctf web warmup详细题解
  19. emmc和ssd的区别
  20. Java for循环-水仙花数

热门文章

  1. 【MFC系列-第11天】CWinApp类成员分析
  2. 基于线性调频(LFM)信号分数阶傅里叶变换的多径时延估计
  3. 存储限制_明年6月份开始,谷歌相册将终止免费无限存储服务
  4. excel表格不够怎么添加_这个Excel表格,怎么做的这么漂亮
  5. 坚果pro2s android 8,锤子坚果Pro2S 安卓8.1 稳定版 超级流畅 火力全开 智能调频 省电稳定 优化简约...
  6. Visual C++中MFC消息的分类
  7. 04_传智播客iOS视频教程_类是以Class对象存储在代码段
  8. linux下解析域名
  9. Block(Closure) Tips
  10. 使用Mockito时遇到的一些问题