问题:h5项目在微信浏览器里,在ios系统下调用微信jssdk失效,报签名失败;在安卓系统里没有这种问题(打开jsdk debug: true,可快速定位问题)
原因:基于vue spa,在history模式下,ios缓存的是首次进入页面的url,当调用微信jsdk进行注册的时候,location.href虽然获取的是当前页面的url,但获取签名的时候其实还是缓存首次进入页面的url,所以会报错。
wx.config({
debug: false,
appId: appid,
timestamp: timestamp,
nonceStr: noncestr,
signature: sign,
jsApiList: [],
openTagList: []
});
解决方法:
- 一、首次进入页面的时候将当前url赋值给变量(推荐)
if (
isIOS() &&
(typeof window.entryUrl === 'undefined' || window.entryUrl === '')
) {
window.entryUrl = location.href.split('#')[0];
}
router.afterEach(() => {
if (!isIOS()) window.entryUrl = location.href.split('#')[0];
});
- 二、调用jsdk的页面进行刷新操作(页面刷新用户体验不好,不推荐)
- 三、ios首次进入页面的时候就注册微信jsdk方法,后面在使用的时候区分ios还是安卓,是ios的情况下直接调用微信方法,不过安卓还是需要每次获取签名注册
- 四、还有一种是通过判断url是否一致更新文档location.assign()方法(有可能回不到上个页面,没试过)