最近遇到一個(gè)問題句伶,WKWebview在加載HTML的時(shí)候會(huì)白屏卡頓一段時(shí)間,網(wǎng)速差的時(shí)候可能會(huì)白屏10秒左右纹安。
通過抓包發(fā)現(xiàn)是前端頁面調(diào)用一個(gè)JS腳本獲取IP地址導(dǎo)致的“https://api.ipify.org/?format=jsonp&callback=getIP”尤辱。
但是查看源碼發(fā)現(xiàn)該腳本通過<script>標(biāo)簽實(shí)現(xiàn),并且設(shè)置了async屬性厢岂,按理說不會(huì)阻塞主線程光督,且在Android和系統(tǒng)的Safari上都不會(huì)出現(xiàn)阻塞UI的問題。
進(jìn)一步在代碼中排查塔粒,最終發(fā)現(xiàn)了問題所在结借,如下圖
因?yàn)橹坝胁糠志W(wǎng)頁加載失敗所以為WKWebViewConfiguration設(shè)置了suppressesIncrementalRendering屬性為true,該屬性是布爾值卒茬,決定Web視圖內(nèi)容在完全加載到內(nèi)存前是否顯示船老,默認(rèn)為NO,即邊加載邊顯示圃酵。例如柳畔,Web視圖中有文字和圖片,會(huì)先顯示文字后顯示圖片辜昵。設(shè)置該屬性后webView的script標(biāo)簽的async屬性失效荸镊。