IOS13系統升級帶來的H5兼容性問題


20號新推送的IOS13給很多app廠商和RD帶來了便秘的感覺,目前復現的問題如下,后續還會持續更新:

1.H5 hybrid輸入框導致的頁面上移,卡住不動。收起減半后,頁面出現半截白屏。(IOS12 + IOS13)

IOS12會在鍵盤彈出時將頁面上推,並壓縮body的高度。

IOS13會在鍵盤彈出時將頁面上推,但html,body的高度全部不變。

目前移動端的輸入框不外乎一下三種:

(1)原生input

(2)可編輯DIV

(3)自家或他家的富文本編輯器

我司目前使用第二種方案,即可編輯DIV+本地原聲虛擬鍵盤(后續會改為原聲H5鍵盤),可從兩個層面解決上述問題。

首先需要在根節點最底部添加一個占位的DIV,並且設置不可見。

<div id="app">
	<div  v-if="loadingFlag && !timeoutFlag" class="hw-box">
		<hw-entrance class="do-entrance"></hw-entrance>
	</div>
	<!-- IOS13用於兼容處理鍵盤彈出后頁面上拉的問題 -->
	<div id="bottomBackToView"></div>
</div>

接下來要添加樣式:

#app #bottomBackToView{
	display: block;
	width: 100%;
	height: 0;
	opacity: 0;
}

H5層面:通過監聽焦點移除設置

oDom.addEventListener('blur', function () {
    document.body.scrollTop = 0; // IOS12
    document.body.style.height = document.body.clientHeight; // IOS12
    backView.scrollIntoView(); // IOS13用於兼容處理鍵盤彈出后頁面上拉的問題
})

上述解決方法在非可編輯DIV的方案中也許時能夠解決問題的,但是在Hybrid H5中可編輯DIV還有其他各種兼容性問題,在此,我們的最終解決方案時需要IOS配合解決的,利用IOS監聽鍵盤收起然后做對應的處理:

bridgeClass.jsEventHook.keyboardWillHide = function() {
    if (!switchFlag) {
        document.body.scrollTop = 0;  // IOS12
        document.body.style.height = document.body.clientHeight;  // IOS12
        backView.scrollIntoView(); // IOS13用於兼容處理鍵盤彈出后頁面上拉的問題
    }
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM