新聞動態(tài)
微信H5頁面前端開發(fā),大多數(shù)人都會遇到的幾個兼容性坑
常見問題 發(fā)布者:cya 2019-12-06 08:41 訪問量:433
作者:codercao
鏈接:https://juejin.im/post/5d47d2eff265da03f77e4e3a
最近給公司微信公眾號,寫了微信h5業(yè)務(wù)頁面,總結(jié)分享一下前端開發(fā)過程中的幾個兼容性坑,項(xiàng)目直接拿的公司頁面,所以下文涉及圖片都模糊處理了。
問題詳情描述:input輸入框光標(biāo),在安卓手機(jī)上顯示沒有問題,但是在蘋果手機(jī)上
當(dāng)點(diǎn)擊輸入的時(shí)候,光標(biāo)的高度和父盒子的高度一樣。例如下圖,左圖是正常所期待的輸入框光標(biāo),右邊是ios的input光標(biāo)。
出現(xiàn)原因分析:通常我們習(xí)慣用height屬性設(shè)置行間的高度和line-height屬性設(shè)置行間的距離(行高),當(dāng)點(diǎn)擊輸入的時(shí)候,光標(biāo)的高度就自動和父盒子的高度一樣了。(谷歌瀏覽器的設(shè)計(jì)原則,還有一種可能就是當(dāng)沒有內(nèi)容的時(shí)候光標(biāo)的高度等于input的line-height的值,當(dāng)有內(nèi)容時(shí),光標(biāo)從input的頂端到文字的底部
解決辦法:高度height和行高line-height內(nèi)容用padding撐開
例如:
.content{
float: left;
box-sizing: border-box;
height: 88px;
width: calc(100% - 240px); .content-input{
display: block;
box-sizing: border-box;
width: 100%;
color: #333333;
font-size: 28px;
//line-height: 88px;
padding-top: 20px;
padding-bottom: 20px;
}
}
問題詳情描述:在ios端,上下滑動頁面時(shí),如果頁面高度超出了一屏,就會出現(xiàn)明顯的卡頓,頁面有部分內(nèi)容顯示不全的情況,例如下圖,右圖是正常頁面,邊是ios上下滑動后,卡頓導(dǎo)致如左圖下面部分丟失。
出現(xiàn)原因分析:
籠統(tǒng)說微信瀏覽器的內(nèi)核,Android上面是使用自帶的WebKit內(nèi)核,iOS里面由于蘋果的原因,使用了自帶的Safari內(nèi)核,Safari對于overflow-scrolling
用了原生控件來實(shí)現(xiàn)。對于有-webkit-overflow-scrolling
的網(wǎng)頁,會創(chuàng)建一個UIScrollView
,提供子layer給渲染模塊使用?!居写甲C】
解決辦法:只需要在公共樣式加入下面這行代碼
*{
-webkit-overflow-scrolling: touch;
}
But,這個屬性是有bug的,比如如果你的頁面中有設(shè)置了絕對定位的節(jié)點(diǎn),那么該節(jié)點(diǎn)的顯示會錯亂,當(dāng)然還有會有其他的一些bug。
拓展知識: -webkit-overflow-scrolling:touch是什么?
MDN上是這樣定義的:
-webkit-overflow-scrolling
屬性控制元素在移動設(shè)備上是否使用滾動回彈效果.auto
: 使用普通滾動, 當(dāng)手指從觸摸屏上移開,滾動會立即停止。touch
: 使用具有回彈效果的滾動, 當(dāng)手指從觸摸屏上移開,內(nèi)容會繼續(xù)保持一段時(shí)間的滾動效果。繼續(xù)滾動的速度和持續(xù)的時(shí)間和滾動手勢的強(qiáng)烈程度成正比。同時(shí)也會創(chuàng)建一個新的堆棧上下文。
問題詳情描述:
輸入內(nèi)容,軟鍵盤彈出,頁面內(nèi)容整體上移,但是鍵盤收起,頁面內(nèi)容不下滑
出現(xiàn)原因分析:
固定定位的元素 在元素內(nèi) input 框聚焦的時(shí)候 彈出的軟鍵盤占位 失去焦點(diǎn)的時(shí)候軟鍵盤消失 但是還是占位的 導(dǎo)致input框不能再次輸入 在失去焦點(diǎn)的時(shí)候給一個事件
解決辦法:
<div class="list-warp">
<div class="title"><span>投·被保險(xiǎn)人姓名</span></div>
<div class="content">
<input class="content-input"
placeholder="請輸入姓名"
v-model="peopleList.name"
@focus="changefocus()"
@blur.prevent="changeBlur()"/> </div>
</div>
changeBlur(){
let u = navigator.userAgent, app = navigator.appVersion;
let isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/);
if(isIOS){
setTimeout(() => {
const scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0
window.scrollTo(0, Math.max(scrollHeight - 1, 0))
}, 200)
}
}
拓展知識: position: fixed
的元素在ios里,收起鍵盤的時(shí)候會被頂上去,特別是第三方鍵盤
問題詳情描述:
安卓微信H5彈出軟鍵盤后擋住input輸入框,如下左圖是期待喚起鍵盤的時(shí)候樣子,右邊是實(shí)際喚起鍵盤的樣子
出現(xiàn)原因分析:待補(bǔ)充
解決辦法:給input和textarea標(biāo)簽添加focus事件,如下,先判斷是不是安卓手機(jī)下的操作,當(dāng)然,可以不用判斷機(jī)型,Document 對象屬性和方法,setTimeout延時(shí)0.5秒,因?yàn)檎{(diào)用安卓鍵盤有一點(diǎn)遲鈍,導(dǎo)致如果不延時(shí)處理的話,滾動就失效了
changefocus(){
let u = navigator.userAgent, app = navigator.appVersion;
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;
if(isAndroid){
setTimeout(function() {
document.activeElement.scrollIntoViewIfNeeded();
document.activeElement.scrollIntoView();
}, 500);
}
},
拓展知識:
Element.scrollIntoView()
方法讓當(dāng)前的元素滾動到瀏覽器窗口的可視區(qū)域內(nèi)。而Element.scrollIntoViewIfNeeded()
方法也是用來將不在瀏覽器窗口的可見區(qū)域內(nèi)的元素滾動到瀏覽器窗口的可見區(qū)域。但如果該元素已經(jīng)在瀏覽器窗口的可見區(qū)域內(nèi),則不會發(fā)生滾動
問題詳情描述:
ios當(dāng)前頁面分享給好友,點(diǎn)擊進(jìn)來是正常,如果二次分享,則跳轉(zhuǎn)到首頁;使用vue router跳轉(zhuǎn)到第二個頁面后在分享時(shí),分享設(shè)置失敗;以上安卓分享都是正常
出現(xiàn)原因分析:jssdk是后端進(jìn)行簽署,前端校驗(yàn),但是有時(shí)跨域,ios是分享以后會自動帶上 from=singlemessage&isappinstalled=0 以及其他參數(shù),分享朋友圈參數(shù)還不一樣,貌似系統(tǒng)不一樣參數(shù)也不一樣,但是每次獲取url并不能獲取后面這些參數(shù)
解決辦法:
(1)可以使用改頁面this.$router.push跳轉(zhuǎn),為window.location.href去跳轉(zhuǎn),而不使用路由跳轉(zhuǎn),這樣可以使地址欄的地址與當(dāng)前頁的地址一樣,可以分享成功(適合分享的頁面不多的情況下,作為一個單單頁運(yùn)用,這樣刷新頁面跳轉(zhuǎn),還是..)
(2)把入口地址保存在本地,等需要獲取簽名的時(shí)候 取出來,注意:sessionStorage.setItem(‘href’,href); 只在剛進(jìn)入單應(yīng)用的時(shí)候保存!【該方法未驗(yàn)證】
如果能用小程序?qū)懙捻撁?,盡量上小程序吧,H5開發(fā)在微信開發(fā)者工具里看頁面效果可能看不出問題,因?yàn)椴荒軉酒疖涙I盤。避免頻繁線上發(fā)布,可以用花生殼或者idcfengye,做內(nèi)網(wǎng)穿透,搭建一個可以通過域名訪問的開發(fā)環(huán)境的h5頁面,在手機(jī)上看看效果,對了微信內(nèi)置瀏覽器緩存機(jī)制。會導(dǎo)致剛提交的代碼(特別是js)效果要半個小時(shí)左右才生效。
微信H5頁面其實(shí)很多知識,登陸授權(quán),jssdk授權(quán),這里就只做了分享,當(dāng)然還有上傳圖片、微信支付等功能,都可能會遇到坑,以上幾個坑也是比較常遇到的,如果有更好的解決方案的話,歡迎在留言區(qū)分享
【推薦閱讀】
動態(tài)安全技術(shù)對數(shù)據(jù)泄露安全保護(hù)
隨機(jī)算法,四大組件,Context,線程間通信,數(shù)組和鏈表
關(guān)鍵字: 微信 H5頁面 前端開發(fā) 兼容性.晨展科技
文章連接: http://www.hsjyfc.com.cn/cjwt/634.html
版權(quán)聲明:文章由 晨展科技 整理收集,來源于互聯(lián)網(wǎng)或者用戶投稿,如有侵權(quán),請聯(lián)系我們,我們會立即刪除。如轉(zhuǎn)載請保留