因?yàn)樽罱捻?xiàng)目需要用到vue開發(fā)微信公眾號,需要調(diào)用微信的掃碼和打開地圖定位。所以就用到了微信JSSDK炉媒。
但是使用之后踪区,問題來了,從/login的頁面跳轉(zhuǎn)至/home頁面的時(shí)候吊骤,在IOS中是授權(quán)失敗缎岗,但是在android中是百分百成功的。
后來白粉,通過了解得知:
vue-router切換的時(shí)候操作的都是瀏覽器的歷史記錄传泊,iOS會把第一次剛進(jìn)入時(shí)的URL作為真實(shí)URL,安卓會把當(dāng)前URL作為真實(shí)URL鸭巴。
所以導(dǎo)致后端在配置好的授權(quán)參數(shù)獲得的config參數(shù)和微信sdk獲取的參數(shù)是不一樣的眷细。
最后的解決辦法:
微信的官方文檔建議:?SPA單頁應(yīng)用應(yīng)該在每次切換頁面的時(shí)候?qū)嵗痵dk
但是由于遇到這個(gè)問題,我就將授權(quán)的部分放在了App.vue這個(gè)部分來完成鹃祖,App.vue包含了溪椎。而且因?yàn)槲也]有使用history模式,?也就是說vue的history模式下你并不能這么來恬口。? 在hash模式下校读,頁面的路徑格式是?https://www.xxx.com/#/xxx?xx=xx&...,這樣的話楷兽,你初始化的路徑就是https://www.xxx.com/地熄,#后面的算是頁內(nèi)跳轉(zhuǎn)不會影響jssdk的配置。當(dāng)然啦芯杀,你如果用的histroy模式端考,那么頁面路徑不帶#就會配判斷為一直在變動(dòng),就需要你每個(gè)頁面都去配置揭厚。
貼代碼:
app.vue
toWXconfig(){
? ? ? ? var _this = this;
? ? ? ? let para = {};
? ? ? ? WXconfig(para).then(data => {
? ? ? ? ? ? if(data.code == 200) {
? ? ? ? ? ? ? wx.config({
? ? ? ? ? ? ? ? ? debug : false,?
? ? ? ? ? ? ? ? ? appId : data.content.appId, // 必填却特,公眾號的唯一標(biāo)識
? ? ? ? ? ? ? ? ? timestamp : data.content.timestamp, // 必填,生成簽名的時(shí)間戳
? ? ? ? ? ? ? ? ? nonceStr : data.content.nonceStr, // 必填筛圆,生成簽名的隨機(jī)串
? ? ? ? ? ? ? ? ? signature : data.content.signature,// 必填裂明,簽名,見附錄1
? ? ? ? ? ? ? ? ? jsApiList : [ 'scanQRCode', 'openLocation','getLocation']
? ? ? ? ? ? ? // 必填太援,需要使用的JS接口列表闽晦,所有JS接口列表見附錄2
? ? ? ? ? ? ? });
? ? ? ? ? ? }?
? ? ? ? })
? ? ? },
? },
home.vue
wxConfigSao(){
????wx.scanQRCode({
????????needResult: 1, // 默認(rèn)為0,掃描結(jié)果由微信處理提岔,1則直接返回掃描結(jié)果仙蛉,
????????scanType: ["qrCode","barCode"], // 可以指定掃二維碼還是一維碼,默認(rèn)二者都有
????????success: function (res) {
????????????var result = res.resultStr; // 當(dāng)needResult 為 1 時(shí)碱蒙,掃碼返回的結(jié)果;
????????????alert(result)
????????}
????});
},