這篇文章主要為大家展示了“iOS中如何解決WKWebView白屏問題”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習一下“iOS中如何解決WKWebView白屏問題”這篇文章吧。
創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計、網(wǎng)站維護、公眾號搭建、微信小程序、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價值而不懈努力!
前言
隨著WKWebView的推出, 解決了很多UIWebView 的問題。比如加載速度慢,內(nèi)存泄露等問題。WKWebView是在iOS 8 推出,前段時間正好把項目也適配到iOS 8 以上了,終于可以把項目中的UIWebView 替換成WKWebView。
WKWebView的特點:
性能高,穩(wěn)定性好,占用的內(nèi)存比較小,
支持JS交互
支持HTML5 新特性
可以添加進度條(然并卵,不好用,還是習慣第三方的)。
支持內(nèi)建手勢,
據(jù)說高達60fps的刷新頻率(不卡)
但是發(fā)現(xiàn)在使用的時候還是有很多坑,這其中就有屢見不鮮的白屏問題。經(jīng)過一些調(diào)試、google 發(fā)現(xiàn)不外乎這3個原因。下面話不多說了,來一起看看詳細的介紹吧。
1. iOS 8.0 - iOS 8.2 偶爾白屏問題
這個是WKWebView 剛推出時的Bug,偶爾會出現(xiàn)白屏,如果想避免這種問題,只能通過版本號判斷,小于8.2的系統(tǒng)使用UIWebView。
2. HTTPS 請求,未實現(xiàn)證書認證代理導(dǎo)致頁面不加載的問題
如果是HTTPS 請求,需要在WKWebView 的 WKNavigationDelegate 中的一個代理方法 中實現(xiàn)獲取服務(wù)器認證的邏輯,最后返回給服務(wù)端。 這個問題常常出現(xiàn)在客戶端無法獲得安全認證的時候(沒有證書,或者是自建證書),比如說https://www.apple.com/cn 是默認的蘋果中國的地址,但是 https://www.apple.com.cn 也是可以訪問的(會自動跳轉(zhuǎn)到 https://www.apple.com/cn ) ,只是在Safari 的安全認證中通不過,我們需要在代理方法中通過服務(wù)端給的驗證方式創(chuàng)建一個憑證,然后繼續(xù)申請訪問。比如在Safari 瀏覽器中第一次訪問時就會彈出對話框,點擊繼續(xù)后就可以繼續(xù)訪問。
通過實現(xiàn)以下代理即可解決
func webView(webView: WKWebView, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) { // 判斷服務(wù)器采用的驗證方法 if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { if challenge.previousFailureCount == 0 { // 如果沒有錯誤的情況下 創(chuàng)建一個憑證,并使用證書 let credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!) completionHandler(.UseCredential, credential) } else { // 驗證失敗,取消本次驗證 completionHandler(.CancelAuthenticationChallenge, nil) } } else { completionHandler(.CancelAuthenticationChallenge, nil) } }
3. 由于滾動組件嵌套的結(jié)構(gòu),不刷新的問題
這是有個哥們遇到的問題,分析的很仔細,從發(fā)現(xiàn)問題,到分析WebKit 源碼,最后得知是在頁面滾動后沒有正常的調(diào)用 WKWebView 的 _updateVisibleContentRects 方法刷新需要渲染的內(nèi)容導(dǎo)致。
以上是“iOS中如何解決WKWebView白屏問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!