vue項目微信分享之后路由鏈接被破壞怎么辦


異常現象:

  多頁面應用,路由采用hash模式,鏈接帶有"#"。

  在微信中分享到朋友圈或好友時,分享出去的路由被破壞,打開分享的鏈接,路由中的“#”會被去掉並追加?fromTimeline之類的后綴參數,這就造成了分享出去的鏈接只能進入首頁,無法正常跳轉到其他路由。

//1. 初始路由鏈接:
http://wx.xxx.com/wx/#/classifylist/1
//2. 分享鏈接被打開之后:
http://wx.xxx.com/wx/?fromTimeline

解決思路:

最開始的想法就是去掉“#”,但是使用history模式去掉“#”之后,主路由(首頁)可以正常訪問,其他頁面從主路由進入也是OK的,但是進入其他頁面刷新頁面的話就無法正常訪問了。查資料,找大牛,結果還是多頁面應用無法正常使用history模式,這條路走不通。

然后就是考慮使用其他字符替換“#”,然后在路由中對訪問鏈接進行判斷,如果是用戶通過分享鏈接訪問,把鏈接中的替換字符重新換回“#”,這樣也就不會影響路由之間的跳轉了,具體代碼如下:

//在主vue中將路由中的"#"替換為"?",並將#后邊的內容編碼后追加到"?"后邊
var urls=location.href.split('/#')[0]+"?"+encodeURIComponent(location.href.split('/#')[1])
                    
//路由中對訪問url進行判斷,如果是訪問的分享鏈接,對鏈接進行路由還原,再重定向到正確的路由,微信追加的 ?fromtimeline 之類的參數已經被?切割掉了,務需理會
var href = location.href.split("?")[0]+"#"+decodeURIComponent(location.href.split("?")[1])
location.href = href

雖然有點麻煩,還是解決問題了,本地調試OK,測試服務器上也沒問題,傳到阿里雲的服務器上又凌亂了:

后來嘗試了下發現,只要不是項目中的真實路由,就會直接給出這個錯誤提示,也就是說直接被阿里雲給攔下了,根本就到不了服務器,更別提路由中進行路由還原重定向了,繼續探索新的方法!

既然阿里雲不接受非真實路由訪問,那就考慮后端重定向吧——后端提供接口,前端在分享配置中,對要分享出去的url進行編碼,然后作為參數傳遞給后端接口,由后端接口直接把參數解碼,還原前端路由,重定向,搞定!

var UrlAttr = location.href.split('#')
var urls = wxShareLinkTransformUrl + "?host=" + encodeURIComponent(UrlAttr[0]) + "&param=" + encodeURIComponent(UrlAttr[1])

途中 wxShareLinkTransformUrl  是后端提供接口,接收前端傳遞的域名以及路由參數,經后端處理重新合成完成的前端路由。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM