一、問題描述
1. vue項目中微信jssdk簽名時,在安卓和ios是有差異的,簽名時使用的url=window.location.href.split('#')[0],此時在安卓沒問題,在ios會導致簽名失敗。因為在安卓中應該拿去簽名的URL就是每個頁面的URL,在ios中拿去簽名的URL應該是微信分享時的URL(這個是我自己猜的),微信會對ios頁面鏈接做處理,我們復制到的鏈接有時是剛進入項目時的鏈接而不是當前頁面的鏈接,多刷新幾次的話可能就是當前頁面的鏈接,總之這個是ios微信的bug,官方建議使用 hash路由解決,官方文檔說明 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/iOS_WKWebview.html
2. 報錯config:require subscribe,關注公眾號后才能簽名。
二、解決方案
1. 使用hash路由
使用hash路由時安卓ios都是沒問題的,這也是官方的建議。
2. history路由里使用 <a href=""></a>
簡單暴力使用a標簽去跳轉簽名的頁面,也就是說A->B,在B頁面做簽名的話,在A頁面的跳轉方式不用vue路由跳轉,改用a標簽跳轉,這個時候獲取到的URL是可以簽名的。但是因為我們使用的是a標簽去跳轉的,所以在B頁面用vue路由離開守衛監聽不到回退事件,在B頁面有用戶未保存需要提示的話就不行了,否則可以使用此方法。
三、其他方案
有人說在剛進入頁面的時候保存URL在其他頁面做簽名,那如果在別的頁面刷新幾次的話還是會簽名失敗的;
有人說在全局的路由守衛里做ios的判斷用對應的完整URL做簽名,反正我沒測試成功。。。