点击分享卡片后,微信获取openId重定向,返回事件直接退回对话框

微信环境下安卓,ios浏览器历史栈有区别h5页面

在安卓系统无法使用以下方法修改浏览器历史记录

window.history.pushState()

参考history官方文档

所以无法通过以下方法监听浏览器返回事件

window.addEventListener('popstate', closeWindow, false)

function closeWindow () {
  if (wx.closeWindow) {
    wx.closeWindow()
  } else {
    WeixinJSBridge.call('closeWindow')
  }
  window.removeEventListener('popstate', closeWindow ,false)
}

ios系统可以使用上面的相关方法

安卓系统点击返回直接返回对话框

鉴于上述方法无法使用所以使用了第二套方案解决问题

let openId = sessionStorage.getItem('openId') || ''
let backOpenId = getQueryString('openId') || '
if (isWechat == 'wechat') {
    if(!openId && !backOpenId) {
      window.location.href = window.location.origin + '/security-service/api/wechat/oauth2/authorize?returnUrl=' + encodeURIComponent(window.location.href);;
      return false;
    }
    if (isAndroid && !openId && backOpenId) {
      sessionStorage.setItem('openId', backOpenId)
      window.history.go(-window.history.length + 1)
      return false
    } else {
      window.history.pushState(null, null, window.location.href)
    }
  }
function getQueryString(name) {
  let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
  let r = window.location.search.substr(1).match(reg);
  if (r != null) {
  	return unescape(r[2]);
  }
  return null;
}

基于以上代码实现了安卓,ios返回事件退回微信对话框。
有更好的方案,欢迎一起讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值