造成webview白屏的原因
1、內(nèi)存使用過大而崩潰;
2、h5鏈接中有中文
3、h5頁面使用了一下第三方的組件,組件下載失敗導(dǎo)致白屏;
一、內(nèi)存使用過大而崩潰;
UIWebView 會因為內(nèi)存使用過大而崩潰,WKWebView 蘋果進(jìn)行了優(yōu)化,不會 Crash 但會導(dǎo)致白屏,不顯示內(nèi)容。
解決方法是監(jiān)聽到 URL 為 nil 或者接收到 WKNavigationDelegate 的 webViewWebContentProcessDidTerminate 時,reload 頁面。
①解決方法一:借助 WKNavigtionDelegate
當(dāng)h5頁面即將白屏?xí)r,會調(diào)用- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0){
}方法,我們只需在這個方法中重新加載webview即可,此時url不為空。
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0){
[webView reload];
}
②解決方法二:檢測 webView.title 是否為空
有時白屏不會調(diào)用方法一的方法,另一種現(xiàn)象是當(dāng)webview白屏?xí)r,webview.title =nil.我們可以在viewWillAppear方法中判斷title是否為nil。進(jìn)而重新加載webview
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (self.webView.title == nil) {
[self.webView reload];
}
}
二、h5鏈接中有中文
對h5鏈接的中文進(jìn)行轉(zhuǎn)碼,使用轉(zhuǎn)碼后的字符串拼接h5鏈接
NSCharacterSet *set = [NSCharacterSet URLQueryAllowedCharacterSet];
NSString *encodedString = [@"中文字符串" stringByAddingPercentEncodingWithAllowedCharacters:set];
三、h5頁面使用了一下第三方的組件,組件下載失敗導(dǎo)致白屏;
聽組長說的,h5頁面使用第三方的字體,在內(nèi)網(wǎng)環(huán)境下,因為沒有下載到外網(wǎng)的自三方字體,導(dǎo)致白屏。