問題描述:
Vue-router用的是history模式,在某個頁面要應用jssdk,應用其中的錄音等方法。Android下無任何問題,但是再IOS下會提示簽名錯誤(invalid signature)。


問題根源
Vue-router進行路由切換的時候,總會操作瀏覽器的歷史記錄,從而相應頁面url變化
在JSSDK文檔中有這么一段話
? 同一個url僅需調用一次,對于變化url的SPA的web app可在每次url變化時進行調用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實現(xiàn)web app的頁面會導致簽名失敗,此問題會在Android6.2中修復 ?
這是因為在IOS上,無論路由切換到哪個頁面,實際真正有效的的簽名URL是【第一次進入應用時的URL】
比如我進入應用的首頁是:http://localhost:8081/patientIndex?要應用錄音的頁面在:http://localhost:8081/myVisitDetail??那么在IOS上,無論你跳到錄音頁面中間跳多少次,真正有效的URL仍然是首頁的URL。
解決方案
既然需要的是首頁的URL,那么我們就可以在路由跳轉的時候保存一下進入首頁的URL,然后在錄音頁面判斷如果是IOS系統(tǒng),那么就使用我們當時記錄的URL,如果不是那么就正常獲取當前頁面的URL就可以了,下面上代碼



結束語
根據(jù)上述方法,IOS下的JSSDK報錯的問題就解決了,但是在實際項目中,因為公眾號沒辦法直接跳到我的首頁,只能跳轉到http://localhost:8081/?就導致在路由守衛(wèi)中我獲取的URL是http://localhost:8081/?,簽名仍然報錯。所以我就只好將獲取URL的方法寫在我的首頁面中,路由守衛(wèi)中做了一下處理
