最近在作某個須要在微信中打開的項目,部分頁面會經過微信分享或複製連接分享給其餘人,而後就遇到了如下坑:
1.IOS端複製連接或在其餘瀏覽器中打開時,假如原網站連接原本應該是"http://xxx.xxxx.xxx/#/abcd",但複製和在其餘瀏覽器中打開的連接都是"http://xxx.xxxx.xxx/#/"
2.android端分享頁面時,wx.onMenuShareAppMessage配置沒問題,分享後回調函數顯示調用成功,但分享的連接打開依舊是"http://xxx.xxxx.xxx/#/"頁(官方說6.7.2分享用updateAppMessageShareData接口,可是引入1.4.0版本js-sdk仍是顯示這個接口無法用)。vue
折騰了一成天,官方文檔看了好幾遍,網上基本上全部的方法都試了,發現都沒什麼卵用,最後打開IOS的分享頁面,再複製IOS分享頁面的連接,發現連接是這個格式"http://xxx.xxxx.xxx/?from=singlemessage#/abcd",相比之下只是多了個"?from=singlemessage"字段,抱着試一試的心態,在當前連接中添加"?from=singlemessage",發現全部問題都迎刃而解。代碼以下:android
.... ....wx.config配置.... .... const ua = window.navigator.userAgent.toLowerCase() const isIOS = !!ua.match(/iphone|ipad/) const isWechat = ua.includes('micromessenger') var firstEnter = true router.beforeEach((to, from, next) => { if (isWechat) { let toPath = location.origin + (location.pathname + (location.hash ? '?from=singlemessage#' : '') + to.fullPath).replace('//', '/') if (isIOS && location.href !== toPath) { if (firstEnter) { // 他人打開分享頁面後,else中的內容會讓第一個頁面加載兩次(應該是微信默認跳轉引發的,else中明明已經禁用了vue的跳轉) firstEnter = false } else { // 不採用vue默認跳轉方式,使用原生跳轉,解決複製連接或在其餘瀏覽器中打開時,連接錯誤 next(false) location.href = toPath return } } let config = { title: to.meta.title || '', desc: location.href, link: toPath, imgUrl: '', type: 'link', dataUrl: '' } wx.ready(function () { wx.onMenuShareTimeline(config) wx.onMenuShareAppMessage(config) }) } next() })
猜想微信內部應該會對域名是mp.weixin.qq.com之外的連接進行判斷,若沒有"?from=singlemessage"字段就直接跳轉到首頁?瀏覽器