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

iOS新版微信底部工具欄遮擋問(wèn)題完美解決

 更新時(shí)間:2020年03月03日 09:45:57   作者:白砂糖的白  
這篇文章主要介紹了iOS新版微信底部工具欄遮擋問(wèn)題完美解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、問(wèn)題描述:

蘋果設(shè)備(iOS)微信中打開H5頁(yè)面,從首頁(yè)跳轉(zhuǎn)到其他頁(yè)面后,頁(yè)面的底部會(huì)出現(xiàn)一個(gè)帶有前進(jìn)和后退按鈕工具欄,而該工具欄會(huì)遮擋住面底部的內(nèi)容,影響頁(yè)面的正常使用。

二、原因分析:

造成該現(xiàn)象的原因是,當(dāng)頁(yè)面跳轉(zhuǎn)時(shí),微信瀏覽器會(huì)通過(guò)window.history讀取到瀏覽的歷史記錄,此時(shí)便會(huì)在頁(yè)面底部顯示出前進(jìn)后退按鈕的工具欄,造成頁(yè)面底部?jī)?nèi)容遮擋。

三、解決方案:

了解了該問(wèn)題出現(xiàn)的原因,我們也就有了解決辦法。首先想到的方案就是控制瀏覽器的歷史記錄。由于考慮到安全性問(wèn)題,瀏覽器的歷史記錄不支持刪除和修改等操作,只能通過(guò)新增或替換的方式來(lái)實(shí)現(xiàn)對(duì)瀏覽歷史的操作,因此可以有以下方案:

(一)方案一:將頁(yè)面的路由跳轉(zhuǎn)方式更換為 “replace” 方式,原生寫法可以使用 window.location.replace() 替代 window.location.href ;vue中可以用this.$router.replace() 替代 this.$router.push()。

本以為這樣就可以解決該問(wèn)題,但是經(jīng)過(guò)測(cè)試發(fā)現(xiàn)該方案也會(huì)出現(xiàn)一些弊端:

  • 無(wú)法使用后退功能,在其他機(jī)型(安卓機(jī)型)上后退會(huì)直接退出;
  • 跳轉(zhuǎn)到某些外部頁(yè)面再后退回來(lái),底部的工具欄還會(huì)出現(xiàn)。

為了解決第一個(gè)問(wèn)題,想到了第二個(gè)方案——監(jiān)聽瀏覽器返回功能:

(二)方案二:通過(guò)history的state來(lái)監(jiān)聽瀏覽器的返回事件,通過(guò)js代碼來(lái)模擬瀏覽器的頁(yè)面后退操作,以此來(lái)解決無(wú)法后退的問(wèn)題。但是該方案由于代碼改動(dòng)較大且頁(yè)面間的跳轉(zhuǎn)情況過(guò)于繁瑣,暫時(shí)擱置。

考慮到操作history比較繁瑣,轉(zhuǎn)而考慮是否可以通過(guò)修改樣式來(lái)實(shí)現(xiàn)兼容:

(三)方案三:使用媒體查詢,手動(dòng)設(shè)置兩種頁(yè)面樣式,通過(guò)判斷機(jī)型是否為iOS來(lái)展示不同的頁(yè)面樣式,將iOS端的底部按鈕欄位置預(yù)留出來(lái)。 但是由于首次進(jìn)入頁(yè)面時(shí)并無(wú)底部欄,且該方案需要判斷的iOS機(jī)型和版本條件過(guò)多,樣式的改動(dòng)也較大,暫時(shí)擱置。

進(jìn)一步分析該問(wèn)題發(fā)生的原因,發(fā)現(xiàn)出現(xiàn)遮擋的主要原因是,底部的工具欄是在頁(yè)面完成渲染之后才渲染的,因此才會(huì)出現(xiàn)覆蓋原頁(yè)面的問(wèn)題,如果能讓該工具欄優(yōu)先于頁(yè)面渲染,則頁(yè)面的視口高度就會(huì)是瀏覽器去掉底部工具欄之后的高度,這樣就不會(huì)出現(xiàn)頁(yè)面內(nèi)容被遮擋的問(wèn)題。想到了這一層面后我有如醍醐灌頂,終于找到可以完美解決的辦法了!

(四)最終方案:在頁(yè)面加載之前通過(guò)主動(dòng)添加空的歷史記錄,觸發(fā)瀏覽器的history監(jiān)聽機(jī)制,讓瀏覽器先于頁(yè)面調(diào)出底部工具欄,從而解決遮擋問(wèn)題。

所以我們需要在路由守衛(wèi)中增加對(duì) window.history 的處理,代碼如下:

router.beforeEach((to, from, next) => {
 window.history.replaceState(null, null, window.localtion.href);
 next();
})

由于項(xiàng)目使用的是vue,這里只展示vue中的寫法,使用其他寫法的同學(xué)可以類比一下。

這里之所以用replaceState 而不用 pushState ,是因?yàn)楹笳邥?huì)在瀏覽器中多增加一條歷史數(shù)據(jù),這會(huì)導(dǎo)致在瀏覽器后退操作時(shí)需要后退兩次才可以返回到之前的頁(yè)面;而使用replaceState 則是替換瀏覽歷史中的上一條記錄,用當(dāng)前頁(yè)面的地址替換上一條記錄,本質(zhì)上瀏覽歷史是不變的,自此關(guān)于iOS端微信的底部工具欄遮擋問(wèn)題就可以完美解決了。

到此這篇關(guān)于iOS新版微信底部工具欄遮擋問(wèn)題完美解決的文章就介紹到這了,更多相關(guān)iOS 微信底部工具欄遮擋內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

珲春市| 巩义市| 阿坝县| 承德县| 颍上县| 郓城县| 紫金县| 奉节县| 南溪县| 若尔盖县| 太白县| 鄯善县| 山东| 高安市| 新郑市| 梨树县| 乌鲁木齐市| 南宫市| 阿荣旗| 北川| 清原| 开江县| 梓潼县| 古田县| 苏尼特右旗| 郁南县| 永安市| 乌审旗| 延川县| 黄石市| 沁水县| 盐亭县| 航空| 南阳市| 多伦县| 桑日县| 丰城市| 通海县| 历史| 北流市| 搜索|