欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

應(yīng)用場景:

  1. vue + vue-router
  2. vue-router使用hash模式(history模式?jīng)]試過)
  3. 不使用微信的js-sdk(因為我這個項目是可配置域名的商城,比較特殊,不能使用微信sdk)

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

HTML5 history.pushState

vue-router的內(nèi)部是通過 history.pushState 和 history.replaceState 實現(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 在每次頁面更新的時候執(zhí)行一次。

// app.vue

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

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

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

// 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 前面加一個 ?_wx_=1 參數(shù),為了方便刷新頁面給一個標(biāo)志位判斷是否已刷新。參數(shù)的 key-value 隨意。

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

相關(guān)文章

  • vue-cli3.X快速創(chuàng)建項目的方法步驟

    vue-cli3.X快速創(chuàng)建項目的方法步驟

    這篇文章主要介紹了vue-cli3.X快速創(chuàng)建項目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • vue開發(fā)中遇到的問題總結(jié)

    vue開發(fā)中遇到的問題總結(jié)

    在本篇文章里小編給大家分享的是關(guān)于vue開發(fā)中遇到的問題總結(jié),有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-04-04
  • vue3中的伸縮菜單組件

    vue3中的伸縮菜單組件

    這篇文章主要介紹了vue3中的伸縮菜單組件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vuex模塊化用法?跨模塊調(diào)用的方式

    Vuex模塊化用法?跨模塊調(diào)用的方式

    這篇文章主要介紹了Vuex模塊化用法?跨模塊調(diào)用的方式,具有很好的參考價值,希望對大家有所幫助,
    2023-10-10
  • vue3的自定義hook函數(shù)使用

    vue3的自定義hook函數(shù)使用

    這篇文章主要介紹了vue3的自定義hook函數(shù)使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 基于Vue+echarts編寫一個折線圖

    基于Vue+echarts編寫一個折線圖

    這篇文章主要為大家詳細(xì)介紹了如何利用Vue和Echarts實現(xiàn)繪制折線圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-05-05
  • Vue3初探之ref、reactive以及改變數(shù)組的值

    Vue3初探之ref、reactive以及改變數(shù)組的值

    在setup函數(shù)中,可以使用ref函數(shù)和reactive函數(shù)來創(chuàng)建響應(yīng)式數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Vue3初探之ref、reactive以及改變數(shù)組值的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • vue?vue-touch移動端手勢詳解

    vue?vue-touch移動端手勢詳解

    這篇文章主要介紹了vue?vue-touch移動端手勢詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Vue.js中數(shù)組變動的檢測詳解

    Vue.js中數(shù)組變動的檢測詳解

    這篇文章給大家主要介紹了Vue.js中數(shù)組變動的檢測,文中給出了詳細(xì)的示例代碼和過程介紹,相信會對大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • vue如何實現(xiàn)點擊選中取消切換

    vue如何實現(xiàn)點擊選中取消切換

    這篇文章主要介紹了vue實現(xiàn)點擊選中取消切換,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論