vue項目中微信jssdk在ios簽名失敗

一、問題描述

  1. vue項目中微信jssdk簽名時,在安卓和ios是有差異的,簽名時使用的url=window.location.href.split('#')[0],此時在安卓沒問題,在ios會導致簽名失敗。因爲在安卓中應該拿去簽名的URL就是每個頁面的URL,在ios中拿去簽名的URL應該是頁面重新加載時的URL(頁面重新加載時的URL包括兩種,1:首次進入項目時的URL,因爲首次進入項目是會重新加載頁面的。2:刷新頁面時的URL,刷新頁面會重新加載頁面)。導致這樣的原因應該是安卓ios加載vue等項目的機制不一樣。我觀察到的不同點是,在ios中vue項目路由跳轉是符合預期的、也就是和在PC上是一樣的,路由跳轉不會重載頁面只是做視圖的切換。但是在安卓中路由的跳轉第一次由A->B是會重載頁面的,但是後面返回A再進入B就不會重載頁面。是否重載頁面的視覺效果就是看是否有加載進度條,有加載進度條就是重載頁面,否則就不是重載頁面。

  2. 報錯config:require subscribe,關注公衆號後才能簽名。

二、解決方案

  1. 使用hash路由

    使用hash路由時安卓ios都是沒問題的,但是有人說做微信分享時微信會把#後面的處理掉,這個我也沒具體驗證過,即使微信處理掉#後面的我們也可以手動添加完整的分享URL。

  2. history路由裏使用 <a href=""></a>

    簡單暴力使用a標籤去跳轉簽名的頁面,也就是說A->B,在B頁面做簽名的話,在A頁面的跳轉方式別用vue路由跳轉,改用a標籤跳轉,這樣的話每次進入B頁面都會重新加載頁面,這個時候獲取到的URL是可以簽名的。

三、其他方案

  有人說在剛進入頁面的時候保存URL在其他頁面做簽名,那如果在別的頁面刷新的話還是會簽名失敗的;
  有人說在全局的路由守衛裏做ios的判斷用對應的完整URL做簽名,反正我沒測試成功。。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章