問題描述
vue項目在微信公眾號通過js-sdk調(diào)用掃一掃这敬,安卓可以正常使用,ios則報非法簽名媳叨,刷新頁面后才可以成功調(diào)用腥光。
截屏2022-03-11 13.35.10.png
解決過程
1、通過百度得知糊秆,在vue項目中武福,push的跳轉(zhuǎn)不能被寫入ios微信瀏覽器的地址欄,需要將push跳轉(zhuǎn)改為window.loaction.href
跳轉(zhuǎn) 痘番,window.loaction.href
跳轉(zhuǎn)才能改變地址欄的變化捉片,才能簽名成功平痰。
2、更改跳轉(zhuǎn)方式后伍纫,仍然沒有解決問題宗雇。通過微信右上角復(fù)制的頁面鏈接和使用location.href
獲取的鏈接對比,發(fā)現(xiàn)二者并不一致莹规。location.href
獲取的鏈接多了一個參數(shù):VNK=1933df22
赔蒲,這個參數(shù)是因為使用了vue-navigation
插件自動加上的。
3访惜、最后的解決方式如下嘹履,通過在beforeRouteEnter
中判斷進(jìn)入的路由和當(dāng)前location.search
是否都含有VNK
參數(shù),如果不一致,則重寫地址欄
// 在需要調(diào)wxapi的頁面寫
beforeRouteEnter(to,from,next) {
const { VNK } = to.query;
let isiOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端
if (isiOS && location.search.indexOf(VNK) < 0) { // 微信分享靜態(tài)頁面
// 此處不可使用location.replace
location.assign(to.fullPath)
} else {
next();
}
},