iOS中WKWebView白屏問題的分析與解決
前言
隨著WKWebView的推出, 解決了很多UIWebView 的問題。比如加載速度慢,內(nèi)存泄露等問題。WKWebView是在iOS 8 推出,前段時間正好把項目也適配到iOS 8 以上了,終于可以把項目中的UIWebView 替換成WKWebView。
WKWebView的特點:
- 性能高,穩(wěn)定性好,占用的內(nèi)存比較小,
- 支持JS交互
- 支持HTML5 新特性
- 可以添加進度條(然并卵,不好用,還是習(xí)慣第三方的)。
- 支持內(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)致。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- iOS WKWebView適配實戰(zhàn)篇
- iOs遷至WKWebView跨過的一些坑
- iOS開發(fā)教程之WKWebView與JS的交互
- iOS中WKWebView仿微信加載進度條
- vue 項目 iOS WKWebView 加載
- 簡單說說iOS之WKWebView的用法小結(jié)
- iOS中WKWebView的一些特殊使用總結(jié)
- iOS使用WKWebView加載HTML5不顯示屏幕寬度的問題解決
- iOS和JS交互教程之WKWebView-協(xié)議攔截詳解
- iOS中wkwebView內(nèi)存泄漏與循環(huán)引用問題詳解
- 微信小程序iOS下拉白屏晃動問題解決方案
- iOS WKWebview 白屏檢測實現(xiàn)的示例
相關(guān)文章
iOS Runntime 動態(tài)添加類方法并調(diào)用-class_addMethod
這篇文章主要介紹了iOS Runntime 動態(tài)添加類方法并調(diào)用-class_addMethod的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08iOS UITableView 與 UITableViewController實例詳解
這篇文章主要介紹了iOS UITableView 與 UITableViewController實例詳解的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09關(guān)于iOS導(dǎo)航欄返回按鈕問題的解決方法
這篇文章主要為大家詳細介紹了關(guān)于iOS導(dǎo)航欄返回按鈕問題的解決方法,對iOS自定義backBarButtonItem的點擊事件進行介紹,感興趣的小伙伴們可以參考一下2016-05-05ios實現(xiàn)自動獲取label高度、寬度及最后一個位置詳解
這篇文章主要給大家介紹了關(guān)于ios如何實現(xiàn)自動獲取label高度、寬度及最后一個位置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10iOS WKWebView中MessageHandler內(nèi)存泄漏問題的完美解決過程
這篇文章主要給大家介紹了關(guān)于iOS WKWebView中MessageHandler內(nèi)存泄漏問題的完美解決過程,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07