vue-cli
生成的单页面项目,router使用history模式
。产品会在公众号内使用,须要添加微信JSSDK
,作分享相关配置。javascript
相关配置与JS接口安全域名
都已经ok,发布后,pc端微信开发者工具
与Android
手机 内测试分享都没问题,不管怎么跳转再分享也没问题。IOS
手机,首次到页面分享没问题,可是跳转后,就会报invalid signature
签名错误。html
就是说 从 【http://aaa.com/index】 跳到 【http://aaa.com/detail】 页面,分享就会报签名错误。vue
因为此项目单页面应用,router使用history
模式,url变了,可是页面也只是index.html
。java
从 A
页面,跳转到B
页面,因为没有刷新,B调用 JSSDK
的 内容,因为vue-router
切换的时候 都是操做的浏览器历史记录,真实url
为第一次刚进入时的url
。每次路由变化时都从新请求下签名,签名的url
须要用第一次进入时的url
。ios
IOS:微信IOS版,每次切换路由,SPA的url是不会变的,发起签名请求的url参数必须是当前页面的url就是最初进入页面时的urlgit
Android:微信安卓版,每次切换路由,SPA的url是会变的,发起签名请求的url参数必须是当前页面的url(不是最初进入页面时的)github
IOS 用来 请求验签接口的url
保存到 全局变量里,跳转页面后,再调用分享接口时,用同一个url
请求。vue-router
// 记录进入app时的url if (typeof window.entryUrl === 'undefined' || window.entryUrl === '') { window.entryUrl = location.href.split('#')[0] } // 进行签名的时候 Android 不用使用以前的连接, ios 须要 let signLink = /(Android)/i.test(navigator.userAgent) ? location.href.split('#')[0] : window.entryUrl;
每次验签使用
signLink
获取vue-cli