iOS中WKWebView白屏問題的分析與解決
前言
隨著WKWebView的推出, 解決了很多UIWebView 的問題。比如加載速度慢,內(nèi)存泄露等問題。WKWebView是在iOS 8 推出,前段時(shí)間正好把項(xiàng)目也適配到iOS 8 以上了,終于可以把項(xiàng)目中的UIWebView 替換成WKWebView。
WKWebView的特點(diǎn):
- 性能高,穩(wěn)定性好,占用的內(nèi)存比較小,
- 支持JS交互
- 支持HTML5 新特性
- 可以添加進(jìn)度條(然并卵,不好用,還是習(xí)慣第三方的)。
- 支持內(nèi)建手勢(shì),
- 據(jù)說高達(dá)60fps的刷新頻率(不卡)
但是發(fā)現(xiàn)在使用的時(shí)候還是有很多坑,這其中就有屢見不鮮的白屏問題。經(jīng)過一些調(diào)試、google 發(fā)現(xiàn)不外乎這3個(gè)原因。下面話不多說了,來(lái)一起看看詳細(xì)的介紹吧。
1. iOS 8.0 - iOS 8.2 偶爾白屏問題
這個(gè)是WKWebView 剛推出時(shí)的Bug,偶爾會(huì)出現(xiàn)白屏,如果想避免這種問題,只能通過版本號(hào)判斷,小于8.2的系統(tǒng)使用UIWebView。
2. HTTPS 請(qǐng)求,未實(shí)現(xiàn)證書認(rèn)證代理導(dǎo)致頁(yè)面不加載的問題
如果是HTTPS 請(qǐng)求,需要在WKWebView 的 WKNavigationDelegate 中的一個(gè)代理方法 中實(shí)現(xiàn)獲取服務(wù)器認(rèn)證的邏輯,最后返回給服務(wù)端。 這個(gè)問題常常出現(xiàn)在客戶端無(wú)法獲得安全認(rèn)證的時(shí)候(沒有證書,或者是自建證書),比如說https://www.apple.com/cn 是默認(rèn)的蘋果中國(guó)的地址,但是 https://www.apple.com.cn 也是可以訪問的(會(huì)自動(dòng)跳轉(zhuǎn)到 https://www.apple.com/cn ) ,只是在Safari 的安全認(rèn)證中通不過,我們需要在代理方法中通過服務(wù)端給的驗(yàn)證方式創(chuàng)建一個(gè)憑證,然后繼續(xù)申請(qǐng)?jiān)L問。比如在Safari 瀏覽器中第一次訪問時(shí)就會(huì)彈出對(duì)話框,點(diǎn)擊繼續(xù)后就可以繼續(xù)訪問。
通過實(shí)現(xiàn)以下代理即可解決
func webView(webView: WKWebView, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) { // 判斷服務(wù)器采用的驗(yàn)證方法 if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { if challenge.previousFailureCount == 0 { // 如果沒有錯(cuò)誤的情況下 創(chuàng)建一個(gè)憑證,并使用證書 let credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!) completionHandler(.UseCredential, credential) } else { // 驗(yàn)證失敗,取消本次驗(yàn)證 completionHandler(.CancelAuthenticationChallenge, nil) } } else { completionHandler(.CancelAuthenticationChallenge, nil) } }
3. 由于滾動(dòng)組件嵌套的結(jié)構(gòu),不刷新的問題
這是有個(gè)哥們遇到的問題,分析的很仔細(xì),從發(fā)現(xiàn)問題,到分析WebKit 源碼,最后得知是在頁(yè)面滾動(dòng)后沒有正常的調(diào)用 WKWebView 的 _updateVisibleContentRects 方法刷新需要渲染的內(nèi)容導(dǎo)致。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- iOS WKWebView適配實(shí)戰(zhàn)篇
- iOs遷至WKWebView跨過的一些坑
- iOS開發(fā)教程之WKWebView與JS的交互
- iOS中WKWebView仿微信加載進(jìn)度條
- vue 項(xiàng)目 iOS WKWebView 加載
- 簡(jiǎn)單說說iOS之WKWebView的用法小結(jié)
- iOS中WKWebView的一些特殊使用總結(jié)
- iOS使用WKWebView加載HTML5不顯示屏幕寬度的問題解決
- iOS和JS交互教程之WKWebView-協(xié)議攔截詳解
- iOS中wkwebView內(nèi)存泄漏與循環(huán)引用問題詳解
- 微信小程序iOS下拉白屏晃動(dòng)問題解決方案
- iOS WKWebview 白屏檢測(cè)實(shí)現(xiàn)的示例
相關(guān)文章
iOS Runntime 動(dòng)態(tài)添加類方法并調(diào)用-class_addMethod
這篇文章主要介紹了iOS Runntime 動(dòng)態(tài)添加類方法并調(diào)用-class_addMethod的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08iOS開發(fā)實(shí)現(xiàn)隨機(jī)圖片驗(yàn)證碼封裝
這篇文章主要介紹了iOS開發(fā)實(shí)現(xiàn)隨機(jī)圖片驗(yàn)證碼封裝,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-08-08iOS UITableView 與 UITableViewController實(shí)例詳解
這篇文章主要介紹了iOS UITableView 與 UITableViewController實(shí)例詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09關(guān)于iOS導(dǎo)航欄返回按鈕問題的解決方法
這篇文章主要為大家詳細(xì)介紹了關(guān)于iOS導(dǎo)航欄返回按鈕問題的解決方法,對(duì)iOS自定義backBarButtonItem的點(diǎn)擊事件進(jìn)行介紹,感興趣的小伙伴們可以參考一下2016-05-05iOS實(shí)現(xiàn)多個(gè)垂直滑動(dòng)條并列視圖
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)多個(gè)垂直滑動(dòng)條并列視圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03ios實(shí)現(xiàn)自動(dòng)獲取label高度、寬度及最后一個(gè)位置詳解
這篇文章主要給大家介紹了關(guān)于ios如何實(shí)現(xiàn)自動(dòng)獲取label高度、寬度及最后一個(gè)位置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10iOS WKWebView中MessageHandler內(nèi)存泄漏問題的完美解決過程
這篇文章主要給大家介紹了關(guān)于iOS WKWebView中MessageHandler內(nèi)存泄漏問題的完美解決過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07