h5在ios系统里调用微信jsdk失败
微信jsdk踩坑
·
问题:h5项目在微信浏览器里,在ios系统下调用微信jssdk失效,报签名失败;在安卓系统里没有这种问题(打开jsdk debug: true,可快速定位问题)
原因:基于vue spa,在history模式下,ios缓存的是首次进入页面的url,当调用微信jsdk进行注册的时候,location.href虽然获取的是当前页面的url,但获取签名的时候其实还是缓存首次进入页面的url,所以会报错。
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: appid, // 必填,公众号的唯一标识
timestamp: timestamp, // 必填,生成签名的时间戳
nonceStr: noncestr, // 必填,生成签名的随机串
signature: sign, // 必填,签名,见附录1
jsApiList: [],
openTagList: []
});
解决方法:
- 一、首次进入页面的时候将当前url赋值给变量(推荐)
// 记录ios初始化url(可放在main.js入口文件获取,否则可能会有不可预测的问题)
if (
isIOS() &&
(typeof window.entryUrl === 'undefined' || window.entryUrl === '')
) {
window.entryUrl = location.href.split('#')[0];
}
// 安卓路由更新的时候 都会更新,所以安卓就在路由里每次都赋值
router.afterEach(() => {
// 记录安卓url 用于注册微信jsdk
if (!isIOS()) window.entryUrl = location.href.split('#')[0];
});
- 二、调用jsdk的页面进行刷新操作(页面刷新用户体验不好,不推荐)
- 三、ios首次进入页面的时候就注册微信jsdk方法,后面在使用的时候区分ios还是安卓,是ios的情况下直接调用微信方法,不过安卓还是需要每次获取签名注册
- 四、还有一种是通过判断url是否一致更新文档location.assign()方法(有可能回不到上个页面,没试过)
更多推荐
已为社区贡献1条内容
所有评论(0)