溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

iOS中如何解決WKWebView白屏問題

發(fā)布時間:2021-07-28 14:30:30 來源:億速云 閱讀:407 作者:小新 欄目:移動開發(fā)

這篇文章主要為大家展示了“iOS中如何解決WKWebView白屏問題”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“iOS中如何解決WKWebView白屏問題”這篇文章吧。

前言

隨著WKWebView的推出, 解決了很多UIWebView 的問題。比如加載速度慢,內(nèi)存泄露等問題。WKWebView是在iOS 8 推出,前段時間正好把項目也適配到iOS 8 以上了,終于可以把項目中的UIWebView 替換成WKWebView。

WKWebView的特點:

  • 性能高,穩(wěn)定性好,占用的內(nèi)存比較小,

  • 支持JS交互

  • 支持HTML5 新特性

  • 可以添加進(jìn)度條(然并卵,不好用,還是習(xí)慣第三方的)。

  • 支持內(nèi)建手勢,

  • 據(jù)說高達(dá)60fps的刷新頻率(不卡)

但是發(fā)現(xiàn)在使用的時候還是有很多坑,這其中就有屢見不鮮的白屏問題。經(jīng)過一些調(diào)試、google 發(fā)現(xiàn)不外乎這3個原因。下面話不多說了,來一起看看詳細(xì)的介紹吧。

1. iOS 8.0 - iOS 8.2 偶爾白屏問題

這個是WKWebView 剛推出時的Bug,偶爾會出現(xiàn)白屏,如果想避免這種問題,只能通過版本號判斷,小于8.2的系統(tǒng)使用UIWebView。

2. HTTPS 請求,未實現(xiàn)證書認(rèn)證代理導(dǎo)致頁面不加載的問題

如果是HTTPS 請求,需要在WKWebView 的 WKNavigationDelegate 中的一個代理方法 中實現(xiàn)獲取服務(wù)器認(rèn)證的邏輯,最后返回給服務(wù)端。 這個問題常常出現(xiàn)在客戶端無法獲得安全認(rèn)證的時候(沒有證書,或者是自建證書),比如說https://www.apple.com/cn 是默認(rèn)的蘋果中國的地址,但是 https://www.apple.com.cn 也是可以訪問的(會自動跳轉(zhuǎn)到 https://www.apple.com/cn ) ,只是在Safari 的安全認(rèn)證中通不過,我們需要在代理方法中通過服務(wù)端給的驗證方式創(chuàng)建一個憑證,然后繼續(xù)申請訪問。比如在Safari 瀏覽器中第一次訪問時就會彈出對話框,點擊繼續(xù)后就可以繼續(xù)訪問。

iOS中如何解決WKWebView白屏問題

通過實現(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),不刷新的問題

這是有個哥們遇到的問題,分析的很仔細(xì),從發(fā)現(xiàn)問題,到分析WebKit 源碼,最后得知是在頁面滾動后沒有正常的調(diào)用 WKWebView 的 _updateVisibleContentRects 方法刷新需要渲染的內(nèi)容導(dǎo)致。

以上是“iOS中如何解決WKWebView白屏問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI