解決了單頁應(yīng)用中非入口頁配置jssdk時invalid signature報錯問題。如果非單頁應(yīng)用或者入口頁報錯,本文不適用。
項目背景:
IOS環(huán)境,vuecli開發(fā)的單頁應(yīng)用。
業(yè)務(wù)邏輯為:A頁面->B頁面->C頁面。需要在C頁面調(diào)用微信jssdk。
因為業(yè)務(wù)關(guān)系,路由守衛(wèi)方式并不合適。
解決方法:
目標:xxx.com/#/b -> xxx.com/#/c
頁面跳轉(zhuǎn)時使用 window.location.href 或 window.location.replace 方式進行跳轉(zhuǎn)。
但是由于#之前的地址沒有改變,所以就算使用頁面跳轉(zhuǎn)的方式瀏覽器也并不會真正的刷新,所以需要拼接一個隨機字符串進行強制刷新:
結(jié)果:xxx.com/#/b -> xxx.com/?random=123456#/c
代碼實現(xiàn):
// 頁面b的methods
// 頁面跳轉(zhuǎn)方法
toC() {
// 獲取設(shè)備信息并判斷是否是ios
let u = navigator.userAgent;
let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
if (isiOS) {
// ios系統(tǒng)就拼接隨機字符串
window.location.replace("/?random=" + this.randomNum(10000, 99999) + "#/c");
} else {
window.location.replace("/#/c");
}
},
// 隨機字符串生成方法
randomNum(minNum, maxNum) {
switch (arguments.length) {
case 1:
return parseInt(Math.random() * minNum + 1, 10);
break;
case 2:
return parseInt(
Math.random() * (maxNum - minNum + 1) + minNum,
10
);
break;
default:
return 0;
break;
}
},