最近做公众号网页开发,使用微信 jssdk
页面签名时 IOS
中一直报错,这才刚开始就被这只拦路虎拦住了,报错如下:
然而 Android
和开发者工具中好得很,没有任何问题:
既然提示 签名非法
,那就是签名有问题咯,但是同样的接口,为什么Android没问题?是真是假还是用官方的签名校验工具验证下:
生成的签名完全没有问题,这就奇怪了,按照网上说的 url
改成如下方式也不行:
url = window.location.href.split('#')[0]
突然看到网上有人说是因为 SPA
的原因,经过几番测试,问题锁定在了 SPA
。先来解释下为什么会这样,我们使用 Vue Router
切换页面时,底层使用的是 pushState
技术,这是 H5
的一个新特性,虽然表面上看页面的 path
变了,内容也换了,但是页面是没有刷新的。
现在知道问题出在哪里,再来实际确认一下。首先进入项目的首页,地址是 https://www.abc.com/weixin/quan"text-align: center">
分享后的链接仍然是首页进入的链接,这是微信的BUG啊,原来在微信的网页中不支持 pushState
,这就导致我们在jssdk从配置时传入的 url
( window.location.href
得到)和微信识别到的不一样,这时候在分享的页面刷新一下,配置就会正常。
后面再看官方文档时也提到了这一点:
然而我的Android没这个问题,iOS反而出现了这个问题(IOS版本13.3.1,微信版本7.0.9,jssdk 1.6)
如何解决
在跳转到要分享的页面时,不用 pushState
,在 Vue router
中就是不用 push
方式跳转,方式如下:
window.location.href = 要跳转的链接 // _this.$router.push({ // … // })
既然 SPA
在微信中只认第一个页面的 path
,那我们就在第一次进入页面时记录下 path
,其他页面用这个 path
。我们在 App.vue
或者 main.js
中记录下这个 path
:
window.sessionStorage.setItem('firstEntryUrl', window.location.href)
然后在需要分享的页面,使用这个 path
:
let url = window.location.href.split('#')[0] if (utils.isIOS() && window.sessionStorage.getItem('firstEntryUrl')) { url = window.sessionStorage.getItem('firstEntryUrl').split('#')[0] }
经测试,上述两种方法都能完美解决。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。