问题描述:
每次刚进页面,signature签名失败,但是刷新页面后,显示signature签名成功。 只有ios是这种情况,安卓没有问题。
原因:
IOS传入的 signature签名url,必须是首次进入页面的url,后期如果不刷新页面,签名的时候,ios还是要用,第一次进入页面的url 来签名。 安卓传当前页面即可
模式:
下面代码是history模式下,解决ios签名失败,本人亲自尝试,有效。
如果hash模式,url需要传#前面的url内容(没有尝试过,其他博文看到的)
/** * @Description: 判断IOS,Android系统 * @date: 2021-11-22 13:43:44 */ export const isAorIM = function () { var u = navigator.userAgent var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1 // android终端 if (isiOS) { return true } else if (isAndroid) { return false } }
/** * @Description: 通过config接口注入权限验证配置 * @date: 2021-11-22 13:44:35 */ import { weChatSign } from '@/api' import { initWxShare } from '@/utils/wxshare' export const initShareM = function (type) { const parames = { userCode: localStorage.getItem('senior-customerList-userCode'), url: type === 'ios' ? window.iosInitUrl : location.href //ios每次传首次进入页面的url, android每次传当前页的url } console.log('parames', parames) weChatSign(parames).then(res => { const resData = res.wechatConfig initWxShare(resData.appId, resData.timestamp, resData.nonceStr, resData.signature) }) }
本来想把iosInitUrl变量放到vuex做统一管理,但是亲自尝试后发现,发现放入vuex中,签名会失败。 直接用window 不会报错。 (不知道什么原因)
此处代码加入mian.js中,每当切换页面,进入页面后,都会触发
router.afterEach((to, from) => { if (isAorIM()) { // ios if (window.iosInitUrl === '' || window.iosInitUrl === undefined) { //如果是ios系统,将首次进入页面的url保存到window中 window.iosInitUrl = window.location.href } initShareM('ios') } else { initShareM('Android') } })