造成webview白屏的原因
1、内存使用过大而崩溃;
2、h5链接中有中文
3、h5页面使用了一下第三方的组件,组件下载失败导致白屏;
一、内存使用过大而崩溃;
UIWebView 会因为内存使用过大而崩溃,WKWebView 苹果进行了优化,不会 Crash 但会导致白屏,不显示内容。
解决方法是监听到 URL 为 nil 或者接收到 WKNavigationDelegate 的 webViewWebContentProcessDidTerminate 时,reload 页面。
①解决方法一:借助 WKNavigtionDelegate
当h5页面即将白屏时,会调用- (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 是否为空
有时白屏不会调用方法一的方法,另一种现象是当webview白屏时,webview.title =nil.我们可以在viewWillAppear方法中判断title是否为nil。进而重新加载webview
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (self.webView.title == nil) {
[self.webView reload];
}
}
二、h5链接中有中文
对h5链接的中文进行转码,使用转码后的字符串拼接h5链接
NSCharacterSet *set = [NSCharacterSet URLQueryAllowedCharacterSet];
NSString *encodedString = [@"中文字符串" stringByAddingPercentEncodingWithAllowedCharacters:set];
三、h5页面使用了一下第三方的组件,组件下载失败导致白屏;
听组长说的,h5页面使用第三方的字体,在内网环境下,因为没有下载到外网的自三方字体,导致白屏。