最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue單頁面在微信下只能分享落地頁的解決方案

 更新時(shí)間:2019年04月15日 14:16:50   作者:ci0n  
這篇文章主要介紹了vue單頁面在微信下只能分享落地頁的解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

實(shí)際上關(guān)鍵詞叫 微信pushState只能分享落地頁 更貼切一點(diǎn)

應(yīng)用場景:

  1. vue + vue-router
  2. vue-router使用hash模式(history模式?jīng)]試過)
  3. 不使用微信的js-sdk(因?yàn)槲疫@個(gè)項(xiàng)目是可配置域名的商城,比較特殊,不能使用微信sdk)

這個(gè)方案并不是最優(yōu)秀的,會對性能造成一定的影響

HTML5 history.pushState

vue-router的內(nèi)部是通過 history.pushState 和 history.replaceState 實(shí)現(xiàn)的。但是iOS設(shè)備的微信瀏覽器不會去檢測它們的變化。但是我們可以通過更新 location.href 讓微信瀏覽器識別到當(dāng)前的url。

// vue-router/src/util/push-state.js

export function pushState (url?: string, replace?: boolean) {
 saveScrollPosition()
 // try...catch the pushState call to get around Safari
 // DOM Exception 18 where it limits to 100 pushState calls
 const history = window.history
 try {
  if (replace) {
   history.replaceState({ key: _key }, '', url)
  } else {
   _key = genKey()
   history.pushState({ key: _key }, '', url)
  }
 } catch (e) {
  window.location[replace ? 'replace' : 'assign'](url)
 }
}

export function replaceState (url?: string) {
 pushState(url, true)
}

解決方法

window.location.href = window.location.href ,這段代碼可以讓微信記錄當(dāng)前的url,且不會刷新頁面??梢栽赼pp.vue中 watch $route 在每次頁面更新的時(shí)候執(zhí)行一次。

// app.vue

watch: {
 $route: {
  immediate: true,
  deep: true,
  handler(to) {
   // 微信瀏覽器判斷
   const WECHAT_BROWSER = navigator.userAgent.toLowerCase().includes('micromessenger')

   // 解決iOS微信瀏覽器分享地址只能是落地頁的問題,這個(gè)操作是不會刷新頁面的,query參數(shù)改變也會執(zhí)行
   if (WECHAT_BROWSER) {
    // eslint-disable-next-line
    window.location.href = window.location.href
   }
  }
},

使用了上述方法可以解決這個(gè)問題,但是這會引出一個(gè)很奇葩的問題,在真機(jī)上進(jìn)入 http://192.168.1.5:8080 和 http://192.168.1.5:8080/#/ 這兩個(gè)頁面,其中有一個(gè)鏈接的bug依然存在。原因具體不清楚,經(jīng)過測試可以在入口文件(main.js)中在頁面還沒有展示內(nèi)容前刷新一次頁面,即可解決這個(gè)問題。

// main.js

// 微信瀏覽器判斷
const WECHAT_BROWSER = navigator.userAgent.toLowerCase().includes('micromessenger')

// 在url插入的search參數(shù),可以隨意,但是必須要
// 例:http://192.168.1.5:8080/?_wx_=1#/
const wxQuery = '_wx_=1'
const isRepeatQuery = location.search.includes(wxQuery)
if (WECHAT_BROWSER && !isRepeatQuery) {
 const unit = (location.search && location.search !== '?') ? '&' : '?'
 location.search += unit + wxQuery  // 添加_wx_參數(shù),該操作會刷新頁面
}

上面的代碼之所以要在 hash 前面加一個(gè) ?_wx_=1 參數(shù),為了方便刷新頁面給一個(gè)標(biāo)志位判斷是否已刷新。參數(shù)的 key-value 隨意。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

岐山县| 平凉市| 黄大仙区| 日土县| 和政县| 莎车县| 芜湖市| 洛隆县| 武山县| 上饶市| 宁陕县| 界首市| 平果县| 犍为县| 恩施市| 乐安县| 屏山县| 乐昌市| 民县| 崇明县| 沁阳市| 延寿县| 芦溪县| 修文县| 莆田市| 玉环县| 洮南市| 阜康市| 罗定市| 翁牛特旗| 若羌县| 沂水县| 台北市| 建始县| 太保市| 青浦区| 孝感市| 墨竹工卡县| 潜山县| 长垣县| 镇平县|